sql - SQL 透视值列和位列
问题描述
我有一个RawDataTable
这样的:
日期 | 国家 | 价值 | 准确的 |
---|---|---|---|
2000 | ABW | 4 | 真的 |
2001年 | ABW | 9 | 真的 |
2002年 | ABW | 8 | 真的 |
2000 | GBR | 1 | 错误的 |
2001年 | GBR | 3 | 真的 |
2002年 | GBR | 4 | 错误的 |
我在 SQL Server 中旋转它以获得以下格式:
日期 | ABW | GBR |
---|---|---|
2000 | 4 | 1 |
2001年 | 9 | 3 |
2002年 | 8 | 4 |
但我也希望Accurate
在回报中包含该列,可能会分散,以便每个国家/地区也有自己的Accurate
列,如下所示:
日期 | ABW | GBR | ABW 准确 | GBR 准确 |
---|---|---|---|---|
2000 | 4 | 1 | 真的 | 错误的 |
2001年 | 9 | 3 | 真的 | 真的 |
2002年 | 8 | 4 | 真的 | 错误的 |
到目前为止,我正在使用下面的查询对其进行旋转,但实际上不知道我想要做的事情是否可行,也不知道从哪里开始修改查询:
SELECT *
FROM
(SELECT
[Date],
[Country],
[Value]
FROM
RawDataTable) CountryVals
PIVOT
(SUM([Value])
FOR [Country] IN ([ABW], [GBR])
) AS PivotTable
我Accurate
在第一列中包括了第四列select
。我尝试将另一个枢轴加入到查询的末尾,但这没有用,我尝试在枢轴选择中添加该 col ......实际上我什至无法让枢轴工作,Accurate
因为它是一种bit
类型而不是decimal
例如,所以不确定用什么代替SUM
解决方案
我通常发现使用条件表达式来进行简单的旋转会容易得多,您可以轻松地剪切和粘贴重复的列。Pivot
只是不直观的语法糖,SQL Server 无论如何都会在内部扩展为 case 表达式。
select date,
Max(case when country='ABW' then value end) ABW,
Max(case when country='GBR' then value end) GBR,
Max(case when country='ABW' then accurate end) ABWAccurate,
Max(case when country='GBR' then accurate end) GBRAccurate
from t
group by date
推荐阅读
- android - WebRTC Android 回声消除
- swift - NSTableView 是否有完整的滑动操作?
- sql - Oracle SQL 计算每个月每周的天数
- nginx - Nginx 让 Nuxt 自动重定向到索引页面
- docker - PC重启后docker从一开始就运行配置是否正常?
- perl - XS.c:可加载库和 perl 二进制文件不匹配(获取握手密钥 0xc100000,需要 0xc180000)
- html - 在 Github 中,如何让 index.html 在我的托管网站中自动打开
- python - Tkinter:不断更新变量
- git - GitHub:当分支与 master 没有更多共同历史记录时如何重新打开拉取请求
- video-streaming - WebRTC 如何根据自适应比特率确定何时调整视频大小?