在SQL Server中使用TSQL进行数据透视和非透视数据

Kom*_*gem 3 sql t-sql sql-server

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
Run Code Online (Sandbox Code Playgroud)

使用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
Run Code Online (Sandbox Code Playgroud)

我已经构建了数据,以便您不必这样做.

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
Run Code Online (Sandbox Code Playgroud)

Yog*_*rma 6

你想要条件aggergation:

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;
Run Code Online (Sandbox Code Playgroud)

如果Report_Group有一个或多个,Percentage_Difference那么你可能需要SUM()而不是MAX().