Sql server 2008 子查询Jelp中的SQL Server案例计数?
我的表中有许多种statusid。某些值表示表中的工作已“完成” 如果某项内容为“完成”,则分组checkid的所有状态ID值均为 1或10或40。Statusid值不是连续的(有许多Statusid值,这只是一个摘录)。有人能告诉我如何在case子查询中使用In子句吗,或者用一种更简洁的方式来编写 预期结果集Sql server 2008 子查询Jelp中的SQL Server案例计数?,sql-server-2008,aggregate-functions,case,Sql Server 2008,Aggregate Functions,Case,我的表中有许多种statusid。某些值表示表中的工作已“完成” 如果某项内容为“完成”,则分组checkid的所有状态ID值均为 1或10或40。Statusid值不是连续的(有许多Statusid值,这只是一个摘录)。有人能告诉我如何在case子查询中使用In子句吗,或者用一种更简洁的方式来编写 预期结果集 checkid iscomplete 3 0 4 1 5 0 6
checkid iscomplete
3 0
4 1
5 0
6 0
4是完整的,因为只有一行,它有一个“10”。
3不完整,因为其中一个值为“1”,而其他值为“2”。
5不完整,因为它只有“30”个值。
6不完整,因为它有一个“40”,但它也有一个“30”
DML:
错误:
在上下文中指定的非布尔类型的表达式,其中
条件是预期的,在“何处”附近
谢谢。编写查询以满足要求的一种方法是:
SELECT
t.checkid,
CASE
WHEN COUNT_BIG(*) = COUNT
(
CASE
WHEN t.statusid IN (1,10,40)
THEN 1
ELSE NULL
END
)
THEN 1
ELSE 0
END
FROM #test1 AS t
GROUP BY
t.checkid
ORDER BY
t.checkid;
这利用了COUNT
(表达式)聚合不计算NULL
(aisde:thoughCOUNT(*)
will)这一事实。对于所有条目均为状态1、10或40的组,嵌套的大小写将为该组中的每一行返回1,等于该组的计数(*)。如果组中甚至有一个成员的状态不是1、10或40,则嵌套的大小写
将返回NULL
,而COUNT
不会对其计数
SELECT
t.checkid,
CASE
WHEN COUNT_BIG(*) = COUNT
(
CASE
WHEN t.statusid IN (1,10,40)
THEN 1
ELSE NULL
END
)
THEN 1
ELSE 0
END
FROM #test1 AS t
GROUP BY
t.checkid
ORDER BY
t.checkid;