我有一个包含2个字段的表: userid 和 value 。可以有多行具有相同的 userid 。 value 列可以是5个不同的值之一。
我想为每个 userid 输出一个摘要行,并计算每个不同的 value 在输入中出现的次数。也就是说,摘要行包含以下列: userid ,值1的计数,值2的计数,值的计数3 ,值4 和值5
示例
1,4
1,3
2,1
3,5
4,1
5,2
输出应为
1,0,0,1,1,0
2,1,0,0,0,0
3,0,0,0,0,5
4,1,0,0,0,0
5,0,1,0,0,0
有什么建议吗?
答案 0 :(得分:0)
select userid,
sum(case value when 1 then [occurs] else 0 end) as countOf1,
sum(case value when 2 then [occurs] else 0 end) as countOf2,
sum(case value when 3 then [occurs] else 0 end) as countOf3,
sum(case value when 4 then [occurs] else 0 end) as countOf4,
sum(case value when 5 then [occurs] else 0 end) as countOf5
from
(
select userid, [value], count(*) as [occurs]
from inputTable
group by userid, [value]
) t
group by userid
order by userid
我从您的问题中收集到相同的输入行值可能会出现多次,尽管您的示例数据没有显示这种可能性。但是,如果每个不同的行只能出现一次,那么可以使用更简单/更短的解决方案。
您说输入中的[值]列可以是5个不同值之一。我的解决方案基于该“要求”。它为每个不同的值包括一行代码。但是,如果不同值的数量可以随时间增长或不受限制,则将需要使用动态SQL的另一种方法。