2

我的结构如下:

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
4

1 回答 1

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

于 2012-07-25T09:22:59.297 回答