有几种方法,你可以转换将数据行分成列。
在SQL Server,你可以使用旋转功能:
select batsman, [2012], [2011], [2010]
from
(
select batsman, runs, year
from yourtable
) d
pivot
(
sum(runs)
for year in ([2012], [2011], [2010])
) piv;
或者你可以使用聚合函数与CASE
表达:
select batsman,
sum(case when year = 2012 then runs else 0 end) [2012],
sum(case when year = 2011 then runs else 0 end) [2011],
sum(case when year = 2010 then runs else 0 end) [2010]
from yourtable
group by batsman;
另一个版本会是不错的,如果你有一个已知的列数。但是,如果你将拥有未知数量year
值,那么你就需要使用动态SQL:
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
select @cols = STUFF((SELECT distinct ',' + QUOTENAME(year)
from yourtable
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = 'SELECT batsman,' + @cols + '
from
(
select batsman, runs, year
from yourtable
) x
pivot
(
sum(runs)
for year in (' + @cols + ')
) p '
execute(@query)
你的要求是什么透视数据。 – 2013-04-30 11:27:03
您可以在SQL Server中使用数据透视功能。你可以找到一个例子[这里] [1] [1]:http://stackoverflow.com/questions/15674373/pivot-rows-to-columns-without-aggregate/15678488#15678488 – 2013-04-30 11:29:43
是,我确实听到了这个问题,但我不知道如何继续...... – 2013-04-30 11:29:52