sql - 在 SQL Server 中使用 TSQL 透视和反透视数据
问题描述
Report_Gap Report_Group Name Percentage_Difference
1 Year ABC Operating 3.9
1 Year ABC Other 6.8
1 Year DEF Other 5.7
1 Year DEF Operating 1.2
1 Year GHI Operating 6.5
1 Year GHI Other -2.0
5 Year ABC Operating 13.6
5 Year ABC Other 5.4
5 Year DEF Other 5.5
5 Year DEF Operating 15.4
5 Year GHI Operating 19.5
5 Year GHI Other -7.9
使用 Transact-SQL,上述格式的数据是否可以表示如下?
Report_Gap Report_Group Operating Other
1 Year ABC 3.9 6.8
1 Year DEF 1.2 5.7
1 Year GHI 6.5 -2.0
5 Year ABC 13.6 5.4
5 Year DEF 15.4 5.5
5 Year GHI 19.5 -7.9
我已经建立了数据,这样您就不必这样做了。
with MyData
as
(
select '1 Year' as Report_Gap,
'ABC' as Report_Group,
'Operating' as Name,
3.9 as Percentage_Difference
union all
select '1 Year' as Report_Gap,
'ABC' as Report_Group,
'Other' as Name,
6.8 as Percentage_Difference
union all
select '1 Year' as Report_Gap,
'DEF' as Report_Group,
'Other' as Name,
5.7 as Percentage_Difference
union all
select '1 Year' as Report_Gap,
'DEF' as Report_Group,
'Operating' as Name,
1.2 as Percentage_Difference
union all
select '1 Year' as Report_Gap,
'GHI' as Report_Group,
'Operating' as Name,
6.5 as Percentage_Difference
union all
select '1 Year' as Report_Gap,
'GHI' as Report_Group,
'Other' as Name,
-2.0 as Percentage_Difference
union all
select '5 Year' as Report_Gap,
'ABC' as Report_Group,
'Operating' as Name,
13.6 as Percentage_Difference
union all
select '5 Year' as Report_Gap,
'ABC' as Report_Group,
'Other' as Name,
5.4 as Percentage_Difference
union all
select '5 Year' as Report_Gap,
'DEF' as Report_Group,
'Other' as Name,
5.5 as Percentage_Difference
union all
select '5 Year' as Report_Gap,
'DEF' as Report_Group,
'Operating' as Name,
15.4 as Percentage_Difference
union all
select '5 Year' as Report_Gap,
'GHI' as Report_Group,
'Operating' as Name,
19.5 as Percentage_Difference
union all
select '5 Year' as Report_Gap,
'GHI' as Report_Group,
'Other' as Name,
-7.9 as Percentage_Difference
)
select * from MyData
go
解决方案
你想要有条件的聚合:
SELECT Report_Gap, Report_Group,
MAX(CASE WHEN Name = 'Operating' THEN Percentage_Difference END) AS Operating,
MAX(CASE WHEN Name = 'Other' THEN Percentage_Difference END) AS Other
FROM table t
GROUP BY Report_Gap, Report_Group;
如果Report_Group
有一个或多个Percentage_Difference
,那么您可能需要SUM()
而不是MAX()
.
推荐阅读
- php - 如何检查数组下一个索引是否存在于php中?
- rust - 如何递归地遵循自引用 Rc?
- gatsby - 带有 gatsby 图像的 Airtable gatsby 源插件
- javascript - Javascript:创建一个变量然后在提示中使用它
- css - 如何正确使用 CSS 3D Transform 创建“全景网格”?
- javascript - 用 Axios 承诺一切
- css - CSS:响应式 UL/LI
- php - 带有 DB2 扩展和 SSL for bluemix 的 PHP 构建
- r - 如何在 R 中编写空格分隔的 txt 文件?
- python - 在类中理解 Python super