Sql server sqlserver2005中的PIVOT语句
在dbMicrosoft SQL Server 2005中,我执行以下查询:Sql server sqlserver2005中的PIVOT语句,sql-server,pivot,pivot-table,Sql Server,Pivot,Pivot Table,在dbMicrosoft SQL Server 2005中,我执行以下查询: SELECT doRegion, YEAR (doDate) AS 'doYear', COUNT (*) AS 'doNumber' FROM [dbo].[doTable] GROUP BY doRegion, YEAR (doDate) ORDER BY doRegion, YEAR (doDate) DESC; 我有这个输出: +----------+------
SELECT
doRegion,
YEAR (doDate) AS 'doYear',
COUNT (*) AS 'doNumber'
FROM
[dbo].[doTable]
GROUP BY
doRegion,
YEAR (doDate)
ORDER BY
doRegion,
YEAR (doDate) DESC;
我有这个输出:
+----------+------+--------+
|doRegion |doYear|doNumber|
+----------+------+--------+
|northw |2017 |806 |
|northw |2016 |186 |
|northw |2015 |149 |
|northw |2014 |114 |
|northw |2013 |72 |
+----------+------+--------+
我需要这个输出:
+-----------+----+----+----+----+----+
|doRegion |2017|2016|2015|2014|2013|
+-----------+----+----+----+----+----+
|northw |806 |186 |149 |114 |72 |
+-----------+----+----+----+----+----+
我想我必须使用它PIVOT语法,我已经尝试过了,但没有成功
如何解决这个问题
你能帮我吗
提前感谢您的帮助,非常感谢。使用动态Sql
样本数据
IF OBJECT_ID('tempdb..#t') IS NOT NULL
DROP TABLE #t
;With cte(doRegion ,doYear,doNumber)
AS
(
SELECT 'northw' ,2017 ,806 UNION ALL
SELECT 'northw' ,2016 ,186 UNION ALL
SELECT 'northw' ,2015 ,149 UNION ALL
SELECT 'northw' ,2014 ,114 UNION ALL
SELECT 'northw' ,2013 ,72
)
SELECT * INTO #t FROM cte
动态Sql
DECLARE @Sql nvarchar(max),@COlumnName nvarchar(max)
SELECT @COlumnName=STUFF((SELECT DISTINCT ', '+QUOTENAME(doYear) FROM #t i
ORDER BY i.doYear DESC FOR XML PATH ('')),1,1,'')
SELECT @COlumnName
SET @Sql='SELECT doRegion,'+@COlumnName+ 'FROM
(
SELECT * FROM #t
)AS SRC
PIVOT
(
MAX(doNumber) FOR doYear IN ('+@COlumnName+')
)AS Pvt
'
Print @Sql
EXEC (@Sql)
结果
doRegion 2017 2016 2015 2014 2013
------------------------------------------------
northw 806 186 149 114 72
你尝试了什么?你犯了什么错误?