t-sql - 组过滤t-sql

标签 t-sql

我的结构如下:

cid status

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

如何获取所有状态均为“T”的cid

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

cid
 1
 2
 5

最佳答案

您可以将公共(public)表表达式与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

这是 fiddle :http://sqlfiddle.com/#!3/9bed7/5/0

关于t-sql - 组过滤t-sql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11646517/

相关文章:

sql-server - t-sql unicode函数返回0

sql - 将数字列更改为日期

sql - TSQL 多列索引

sql - T-SQL UDF 与完整表达式运行时

sql - 使用 SQL Server 对多个键值对进行匹配/分组

sql - 如何使用 SQL 在单个表中更新多行?

t-sql - 为类中的 View 创建从表名称获取设置属性

sql - 聚合不能出现在 WHERE 子句中 (MSSM studio)

sql - 转换为十进制时为 "Error converting to int"

sql-server - SQL Server 2012 内联表值函数返回空行