0

次の列を持つ SQL Server テーブルがあるとします。

ID_PK uniqueidentifier NOT NULL PRIMARY KEY,
ID uniqueidentifier NOT NULL,
TYPE int NOT NULL,
VALUE nvarchar(MAX) NOT NULL

さらに、ID-TYPE の組み合わせと ID-TYPE-VALUE の組み合わせがデータベース全体で一意であると仮定します。TYPE は 1、2、または 3 のいずれかです。データが次のようになっているとします。

UI1 1 'A' 
UI1 2 'B'
UI2 1 'X'
UI2 3 'C'
UI3 2 'Y'
UI4 2 'B'

タイプ 1 が「A」、タイプ 2 が「B」、タイプ 3 が「C」である場合、すべてのタイプを検索する必要があります。特定の ID のタイプが存在しない場合は、検索する必要はありません。タイプの値が正しくない場合は、ID を選択しないでください。

したがって、私の結果セットは次のようになります。

UI1 1 'A'
UI1 2 'B'
UI4 2 'B'

UI2 のタイプ 1 は「A」ではないため、UI2 を返さないでください。UI3 のタイプ 2 は 'B' ではないため、これも無視してください。

次に、一意の ID が必要です。

UI1
UI4
4

1 に答える 1

0

このクエリを試してください:

SELECT ID, TYPE, VALUE
FROM Table
WHERE (TYPE = 1 AND VALUE = 'A')
  OR (TYPE = 2 AND VALUE = 'B')
  OR (TYPE = 3 AND VALUE = 'C')

アップデート:

SELECT t.ID
FROM t
INNER JOIN (
  SELECT ID, MIN(CASE WHEN((TYPE = 1 AND VALUE = 'A')
    OR (TYPE = 2 AND VALUE = 'B')
    OR (TYPE = 3 AND VALUE = 'C')) THEN 1 ELSE 0 END) AS VALID
  FROM t 
  GROUP BY t.ID
) x 
ON x.ID = t.ID AND x.VALID = 1
GROUP BY t.ID
于 2012-10-25T07:05:40.897 に答える