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 回答