鉴于此表:
Session | User | Start | Stop
1 | 1 | 2014-10-10 | null
2 | 1 | 2014-10-10 | 2014-10-10
3 | 1 | 2014-09-10 | 2014-09-10
4 | 2 | 2014-10-10 | null
5 | 2 | 2014-10-10 | 2014-10-10
我想计算每个用户有多少个开放会话,以及该用户在给定日期的会话总数:
User | Date | Open | Total |
1 | 2014-10-10 | 1 | 2 |
1 | 2014-09-10 | 0 | 1 |
2 | 2014-10-10 | 1 | 2 |
通过对用户进行分组,启动和停止,我可以获得两行,一行打开会话,另一行打开,但我宁愿有两列......
(我使用的是SQL Server 2008 R2)
答案 0 :(得分:3)
使用案例表达式有条件地计算:
select
user,
start as [date],
count(case when stop is null then 1 end) as open,
count(*) as total
from sessions
group by user, start;
答案 1 :(得分:0)
试试这个:
SELECT t.user, t.start,
sum(
case
when stop is null then 1 else 0
end) as 'Open',
count(t.start) as 'Total'
FROM yourtable t
GROUP BY t.user, t.start