在 SQL Server 中计算同一行中的值

Posted

技术标签:

【中文标题】在 SQL Server 中计算同一行中的值【英文标题】:Counting values within the same row in SQL Server 【发布时间】:2020-09-24 09:09:16 【问题描述】:

我的 SQL Server 问题如下:假设我们有客户,我们希望根据 0 到 2 的 4 个类别(Score_1...Score_4)对它们进行评分。我有一张下表:

我希望我的代码做的是计算我的每个客户收到的 0、1 和 2 值的数量。我想得到的结果表是这样的:

所以client_1得到两个0分,一个1分和一个2分,client_2得到一个0分,一个1分和两个2分。有什么建议么?提前致谢!

【问题讨论】:

【参考方案1】:

您可以取消透视,然后进行条件聚合:

select t.id, 
    sum(case when x.score = 0 then 1 else 0 end) cnt_0,
    sum(case when x.score = 1 then 1 else 0 end) cnt_1,
    sum(case when x.score = 2 then 1 else 0 end) cnt_2
from mytable t
cross apply (values (score_1), (score_2), (score_3), (score_4)) x(score)
group by t.id

【讨论】:

以上是关于在 SQL Server 中计算同一行中的值的主要内容,如果未能解决你的问题,请参考以下文章

如何在使用 SQL 的重复搜索中排除其他值中的值

如何将另一行中的值插入列中 - SQL Server

具有列表值的列,如果列表具有超过 1 个元素,则解码这两个值并包含在新列的同一行中的列表中

如果在SQL Server中只有序列形式,我想计算名称列中的值[重复]

SQL Server 根据字段的值触发插入和/或更新的记录

SQL Server中的开窗函数是啥?