xor*_*wer 5 sql sql-server sql-server-2008
我有一个SQL查询,它以以下格式带来数据;
Total Hours Year
100.00 2012
200.00 2012
300.00 2012
75.00 2011
150.00 2011
50.00 2010
125.00 2010
Run Code Online (Sandbox Code Playgroud)
我需要对总小时数求和并将结果集作为;
2012 2011 2010
600 225 175
Run Code Online (Sandbox Code Playgroud)
请在这里帮助我!如果您需要更多信息,请与我们联系。
您可以使用PIVOT执行此操作,可以是对年份进行硬编码的静态PIVOT,也可以是运行查询时在其中创建年份列表的动态PIVOT:
静态PIVOT:
create table table1
(
totalhours decimal(10, 2),
year int
)
insert into table1 values(100, 2012)
insert into table1 values(200, 2012)
insert into table1 values(300, 2012)
insert into table1 values(75, 2011)
insert into table1 values(150, 2011)
insert into table1 values(50, 2010)
insert into table1 values(125, 2010)
select *
from
(
select *
from table1
) x
pivot
(
sum(totalhours)
for year in ([2012], [2011], [2010])
) p
Run Code Online (Sandbox Code Playgroud)
动态枢轴:
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX);
select @cols = STUFF((SELECT distinct ',' + QUOTENAME(c.year)
FROM table1 c
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = 'SELECT ' + @cols + ' from
(
select totalhours, year
from table1
) x
pivot
(
sum(totalhours)
for year in (' + @cols + ')
) p '
execute(@query)
Run Code Online (Sandbox Code Playgroud)
两者都会给您相同的结果。
| 归档时间: |
|
| 查看次数: |
8386 次 |
| 最近记录: |