我正在对包含以下内容的表进行动态数据透视查询:
- OID-订单ID
- 尺寸——产品的尺寸
- BucketNum - 大小的顺序
应该去
- 数量 - 订购了多少
大小列包含不同的大小,具体取决于 OID。
因此,使用找到的代码here http://www.sqlprof.com/blogs/sqldev/archive/2008/04/12/pivots-with-dynamic-columns-in-sql-server-2005-2008.aspx,我把它放在一起:
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 )
除了列标题(大小标签)不是基于bucketnum 列的顺序外,这非常有效。它们是根据尺寸排列的。
我在数据透视后尝试了可选的 Order By,但这不起作用。
如何控制列的显示顺序?
谢谢
你需要解决这个问题:
SELECT @listCol = STUFF(( SELECT distinct '], [' + [size]
FROM #t
FOR
XML PATH('')
), 1, 2, '') + ']'
以正确的顺序返回列。你可能必须做这样的事情而不是使用DISTINCT
:
SELECT [size]
FROM #t
GROUP BY [size]
ORDER BY MIN(BucketNum)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)