SQL Dynamic Pivot - 如何对列进行排序

Ger*_*ton 7 pivot sql-server-2005 dynamic-pivot

我正在对包含以下内容的表进行动态数据透视查询:

  • OID - OrderID
  • 尺寸 - 产品尺寸
  • BucketNum - 大小的顺序
  • 数量 - 订购了多少

size列包含不同的大小,具体取决于OID.

所以,使用这里找到的代码,我把它放在一起:

DECLARE @listCol VARCHAR(2000)
DECLARE @query VARCHAR(4000)

SELECT  @listCol = STUFF(( SELECT distinct  '], [' + [size]
                           FROM     #t
                         FOR
                           XML PATH('')
                         ), 1, 2, '') + ']'


SET @query = 'SELECT * FROM
      (SELECT OID,  [size], [quantity]
            FROM #t 
            ) src
PIVOT (SUM(quantity) FOR Size
IN (' + @listCol + ')) AS pvt'


EXECUTE ( @query )
Run Code Online (Sandbox Code Playgroud)

除了列标题(大小标签)不在基于bucketnum列的顺序之外,这种方法很有效.这些是基于尺寸的顺序.

我在枢轴后尝试了可选的Order By,但这不起作用.

如何控制列的显示顺序?

谢谢

Cad*_*oux 7

你需要解决这个问题:

SELECT  @listCol = STUFF(( SELECT distinct  '], [' + [size]
                           FROM     #t
                         FOR
                           XML PATH('')
                         ), 1, 2, '') + ']'
Run Code Online (Sandbox Code Playgroud)

以正确的顺序返回列.您可能必须执行以下操作而不是使用DISTINCT:

SELECT [size]
FROM     #t
GROUP BY [size]
ORDER BY MIN(BucketNum)
Run Code Online (Sandbox Code Playgroud)