我有一个查询(从 MyTable 选择 [类型]、a、b、c、d、e)返回:
[type], [a], [b], [c], [d], [e]
type 1, x , x , x , x , x
type 2, x , x , x , x , x
type 3, x , x , x , x , x
我想旋转数据,使其显示为:
[] , [type 1], [type 2], [type 3]
[a] , x , x , x
[b] , x , x , x
[c] , x , x , x
[d] , x , x , x
[e] , x , x , x
如有任何有关 SQL 的指示,我们将不胜感激。
最佳答案
我们需要的是:
SELECT Col, [type 1], [type 2], [type 3]
FROM (SELECT [type], Amount, Col
FROM (SELECT [type], [a], [b], [c], [d], [e]
FROM _MyTable) as sq_source
UNPIVOT (Amount FOR Col IN ([a], [b], [c], [d], [e])) as sq_up) as sq
PIVOT (MIN(Amount) FOR [type] IN ([type 1], [type 2], [type 3])) as p;
但是由于types的数量是不确定的,我们必须动态地做
DECLARE @cols NVARCHAR(2000)
SELECT @cols = COALESCE(@cols + ',[' + [type] + ']',
'[' + [type] + ']')
FROM _MyTable
ORDER BY [type]
DECLARE @query NVARCHAR(4000)
SET @query = N'SELECT Col, ' + @cols + '
FROM (SELECT [type], Amount, Col
FROM (SELECT [type], [a], [b], [c], [d], [e]
FROM _MyTable) as sq_source
UNPIVOT (Amount FOR Col IN ([a], [b], [c], [d], [e])) as sq_up) as sq
PIVOT (MIN(Amount) FOR [type] IN (' + @cols + ')) as p;';
EXECUTE(@query)
但是要小心,因为这个查询在技术上是一个注入(inject)向量。
关于sql - 简单的数据透视,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7672799/