比方说,我有这种表:SQL Server:如何使用where子句在select查询中包含count?
id out flag
--- --- ---
1 0 1
1 1 0
1 4 0
2 0 1
2 2 0
2 2 0
3 0 1
3 2 0
3 1 0
3 4 0
我要计数与出的行数=(0,2,或4)和以后的显示行,其中标志= 1
基本上: 选择ID,计数(其中,出IN(0,2,4))作为CNT,其中标志= 1
我所需的输出:
id cnt
--- ----
1 2
2 3
3 3
该查询可以作为离pected但只有当我没有“其中标志= 1”:
select id,sum(case when out in (0,2,4) then 1 else 0 end) over(partition by id) as cnt
from tablename
有没有办法对我来说,首先计算的东西总和(),并将其存储在一列,然后再使用过滤掉行where子句?目前发生的情况是行首先被过滤掉,然后计算sum(...)。
我能纠正这种情况吗?
应的输出为ID = 1是2? –
我同意,id = 1应该有一个计数2 – user918967
刚刚更新!对困惑感到抱歉。 – 90abyss