【发布时间】:2017-02-01 12:13:51
【问题描述】:
假设我有这张桌子:
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
我想计算 out=(0, 2, or 4) 的行数,然后显示 flag = 1 的行
基本上: select id, count(where out IN(0,2,4)) as cnt where flag = 1
我想要的输出:
id cnt
--- ----
1 2
2 3
3 3
此查询按预期工作,但仅当我没有“where flag = 1”时:
select id,sum(case when out in (0,2,4) then 1 else 0 end) over(partition by id) as cnt
from tablename
有没有办法让我先计算 sum() 并将其存储在列中,然后使用 where 子句过滤掉行?目前发生的情况是先过滤掉行,然后计算 sum(...)。
有什么办法可以改正吗?
【问题讨论】:
-
id =1 的输出应该是 2 吗?
-
我同意,id=1 应该是 2
-
刚刚更新!很抱歉造成混乱。
-
请更新帖子以反映您的真实需求或打开新帖子
标签: sql sql-server tsql