sql - 有没有办法在 tSQL 的不同列中汇总分组?
问题描述
我有几列具有不同数量的相同值:
+---+---+---+
| A | B | C |
+---+---+---+
| 1 | 4 | 4 |
| 2 | 4 | 3 |
| 2 | 4 | 3 |
| 4 | 4 | 3 |
| 3 | 2 | 3 |
| 3 | 1 | 2 |
| 3 | 3 | 2 |
| 1 | 1 | 1 |
+---+---+---+
为此,我想计算每个值的总数并返回如下输出:
+---+---+---+---+
| | A | B | C |
+---+---+---+---+
| 1 | 2 | 2 | 1 |
| 2 | 2 | 1 | 2 |
| 3 | 3 | 1 | 4 |
| 4 | 1 | 4 | 1 |
+---+---+---+---+
据我所知,枢轴操作仅允许您计算单个列中的响应数。
任何帮助感激不尽!
干杯
解决方案
您可以使用apply
:
select colv,
sum(case when colname = 'A' then 1 else 0 end) as [A],
sum(case when colname = 'B' then 1 else 0 end) as [B],
sum(case when colname = 'C' then 1 else 0 end) as [C]
from table t cross apply
( values ('A', A), ('B', B), ('C', C)
) tt (colname, colv)
group by colv;
推荐阅读
- reactjs - 如何在 react-awsome-slider 上添加按钮或文本
- php - 如何仅从给定数字的用户输入中创建数组列表
- mongodb - 如何查看 MongoDB 索引数据结构?
- r - 根据其他变量删除行的子集
- wpf - 如何将 ObservableCollection 绑定到 WPF 中的组合框?
- javascript - 将原始查询转换为续集
- java - 为什么不同日期的时间戳相同而没有部分时间?
- swagger - 如何在asp.net core 2.2 web api中使用不同版本的相同参数创建相同的路由名称
- reactjs - 您可以在 Material UI 中添加额外的颜色吗?
- swagger - 如何使用 NSwag 生成 OpenAPI 2.0 文件?