组过滤t-sql

时间:2012-07-25 09:19:15

标签: tsql

我的结构如下:

cid status

 1    T
 2    T
 1    T
 1    T
 2    T
 3    X
 3    T
 5    T

如何cid 所有状态为'T'。

响应必须是(注意3被省略,因为它还具有X状态):

cid
 1
 2
 5

1 个答案:

答案 0 :(得分:4)

您可以使用具有ROW_NUMBER功能的公用表表达式,该表达式类似于GROUP BY

WITH CTE AS(
   SELECT CID, RN = ROW_NUMBER()OVER(PARTITION BY CID ORDER BY CID)
   FROM tbl
   WHERE NOT EXISTS(
     SELECT NULL FROM tbl t2
     WHERE t2.CID=tbl.CID
     AND Status <> 'T'
   )
)
SELECT CID FROM CTE
WHERE RN = 1

这是小提琴:http://sqlfiddle.com/#!3/9bed7/5/0