我有一个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
我需要总计小时数并将结果集合为;
2012 2011 2010
600 225 175
请在这里帮助我!如果您需要更多信息,请与我们联系。
答案 0 :(得分:4)
您可以使用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
Here is a SQL Fiddle with an example
Dynamic Pivot:
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)
两者都会给你相同的结果。
答案 1 :(得分:3)
在msdn Using PIVOT and UNPIVOT上执行此操作,这样可以轻松解决问题..
答案 2 :(得分:0)
一个。你可能会以某种方式得到这样的数据,但是这样做也许会有所帮助:
select sum(p.TotalHours), p.Year From someTable p
GROUP BY p.Year
湾你应该做一些逻辑来将列放入行和vs。
答案 3 :(得分:0)
您可以使用 sql分组 http://www.w3schools.com/sql/sql_groupby.asp
select
[Year],
SUM([Hours]) as HoursByYear
from
#table
group by
[Year]
结果:
Year HoursByYear
2010 175
2011 225
2012 600
或 pivot ,就像Pranay Rana建议的那样
select
[2010], [2011], [2012]
from
(select [YEAR], [Hours]
from #table) AS SourceTable
pivot
(
sum([Hours])
for [Year] IN ([2010], [2011], [2012])
) as PivotTable
结果:
2010 2011 2012
175 225 600
答案 4 :(得分:-1)
select sum("Total Hours") as "Total Hours", Year
from tablename
group by Year
这个简单的查询将为您提供所需的输出。