我在下一个情况遇到一些麻烦:我需要为一个语句选择4个位置,我需要将这些位置作为列进行旋转。数据库的结构如下:StatementId 1,PositionId 2,RepCurrValue 3.例如,对于StatementId = 55,对于position = 58 OR 62 OR 67 OR 82,结果为:
1 2 3
-----------------
55 58 146,8000
55 62 59,9800
55 67 800,0500
55 82 136,7600
我希望它是
1 58 62 67 82
---------------------------------------
55 146,8000 59,9800 800,0500 136,7600
非常感谢您的支持。
答案 0 :(得分:0)
我使用PIVOT表做了这个练习,可以帮助你,考虑到列标题等于字段[2]的内容而不在列[2]中提供重复值:
DECLARE @cols AS NVARCHAR(MAX)
SET @cols = STUFF((SELECT ',[' + convert(nvarchar,(t.[2])) + ']' AS ID
FROM TB_1 t
FOR XML PATH(''), TYPE).value('.', 'varchar(max)'),1,1, '')
DECLARE @query AS NVARCHAR(MAX);
SET @query = N'SELECT p.[1],' + @cols + N' from
(
SELECT [1],[2],[3] FROM TB_1
) x
pivot
(
max([3])
for [2] in (' + @cols + N')
) p
'
exec sp_executesql @query;
通过添加额外的StatementId(56)和与StatementId(56)相关的新的不同位置(90,91)获得的结果
1 58 62 67 82 90 91
55 146,8000 59,9800 800,0500 136,7600 NULL NULL
56 NULL NULL NULL NULL 185,74 185,74
非动态解决方案可以是:
select *
from
(
SELECT [1],[2],[3] FROM TB_1
) x
pivot
(
max([3])
for [2] in ([58] , [62] , [67] , [82] )
) p