-1

実行中SQL Server 2012。次の値セットを検討してください。

ID    Status
------------
11    0
11    1
11    2
12    0
12    1
12    2
13    1
14    2

ID でグループ化された交差ステータス値を取得するにはどうすればよいですか?

つまり、 ID=13only hasStatus=1ID=14only hasStatus=2であるため、上記のデータは空の行になります。

Status
------

ただし、 を削除するID=14と、結果は次のようになります。

Status
------
1

これも削除するID=13と、結果は次のようになります。

Status
------
0
1
2

アップデート

ID問題は、任意の数の値で任意の数について解決する必要がありStatusます。したがって、2 つのSELECTクエリでは不十分です (上記のテスト データでは機能する可能性がありますが)。

4

3 に答える 3

1

これは関係分割の問題です。

doubleNOT EXISTSアプローチを使用すると、空のセットで割るとすべてが返されます。

DECLARE @S TABLE (
  [ID] INT PRIMARY KEY)

INSERT INTO @S
VALUES      (11),
            (12)

SELECT DISTINCT [Status]
FROM   YourTable Y1
WHERE  NOT EXISTS(SELECT *
                  FROM   @S
                  WHERE  NOT EXISTS (SELECT *
                                     FROM   YourTable Y2
                                     WHERE  Y1.[Status] = Y2.[Status]
                                            AND Y2.ID = [@S].ID)) 
于 2013-10-23T14:40:38.580 に答える
0

最も簡単な(そして最も読みやすい)のは、次のようにすることだと思います:

select t.status
from Table1 as t
group by t.status
having count(distinct t.id) = (select count(distinct t2.id) from Table1 as t2)

sql fiddle demo

于 2013-10-23T17:44:46.753 に答える