有幾種方法,你可以轉換將數據行分成列。
在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