2017-10-13 20 views
2

以下に示すようにIは、ソーステーブルを有する:SQL複数のレコード

ID Status State_id 
X Active 1 
X Active 2 
X Active 3 
X Active 4 
Y Active 2 
Y Active 3 
Z Active 1 
Z Active 2 
Z Active 3 
A Active 2 
A Active 3 

IはSTATE_ID 2,3に基づいて2出力を必要とします。 2,3

ID Status 
X Active 
Z Active 
+0

'SELECT ID、ステータスを設定し取得するためのIDを反転WHERE STATE_ID IN(2,3)AND行うデータベース( 'Y'、 'A')'でIDあなたが使う?セット1とセット2の違いは何ですか?アクティブなエントリの数ですか? – cSteusloff

+0

どの[DBMS](https://en.wikipedia.org/wiki/DBMS)製品を使用していますか? Postgres?オラクル? "_SQL_"はクエリ言語であり、特定のデータベース製品の名前ではありません。 –

答えて

0
/*Set 1*/ 
    select t1.id, t1.status 
    from table1 t1 
    where t1.state_id in (2, 3) /*ids you want */ 
    and t1.id not in ((
    select distinct t2.id 
    from table1 t2 
    where t2.state_id in (1, 4) /*ids you dont want*/ 
)) 
    group by t1.id, t1.status 

10ジャストTBLから2

+0

ここでは謎です:http://sqlfiddle.com/#!9/15a90c/54 – tommyO

0

で追加の状態IDを持つためにセット2のみ2,3 STATE_ID

ID Status 
Y Active 
A Active 

を持つために、私はそれはあなたが結果を期待与えるべきだと思う

セット1。

は、あなたがこのスクリプトを使用することができます SqlFiddle

--Set 1 
SELECT id ,status 
FROM table1 
-- WHERE status='Active' 
GROUP BY id ,status 
HAVING COUNT(DISTINCT state_id) =count(DISTINCT CASE WHEN state_id IN (2,3) THEN state_id END) ; 

--Set2 
SELECT id ,status 
FROM table1 
GROUP BY id ,status 
HAVING COUNT(DISTINCT state_id)>count(DISTINCT CASE WHEN state_id IN (2,3) 
    THEN state_id END) 
AND COUNT(DISTINCT CASE WHEN state_id IN (2,3) THEN state_id END) =2; 
+0

これは期待した結果が得られていません – vkase

+0

@vkase:ええ、更新しました.... – a1ex07

0

を更新しました。

セット1

SELECT 
    ID, Status 
FROM 
    @Tbl T 
GROUP BY 
    ID, Status 
HAVING 
    SUM(CASE WHEN State_id IN (2,3) THEN 1 ELSE 0 END) = 2 
    AND SUM(CASE WHEN State_id IN (2,3) THEN 0 ELSE 1 END) = 0 

結果:

ID Status 
---- ---------- 
A Active 
Y Active 

セット2

SELECT 
    ID, Status 
FROM 
    @Tbl T 
GROUP BY 
    ID, Status 
HAVING 
    SUM(CASE WHEN State_id IN (2,3) THEN 1 ELSE 0 END) = 2 
    AND SUM(CASE WHEN State_id IN (2,3) THEN 0 ELSE 1 END) > 0 

結果:

関連する問題