【问题标题】:PIVOT Statement in SQL Server 2005SQL Server 2005 中的 PIVOT 语句
【发布时间】:2017-11-23 07:03:08
【问题描述】:

在 db Microsoft 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;

我有这个输出:

+----------+------+--------+
|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 语法,我已经尝试过这个 tutorial 没有成功。

如何解决这个问题?

你能帮帮我吗?

提前感谢您的帮助,非常感谢。

【问题讨论】:

  • 您尝试了什么,遇到了哪些错误?

标签: sql-server pivot pivot-table


【解决方案1】:

使用动态 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-03
    • 2011-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多