我有以下记录
DocNo PrnOrd DESCR ITEMCD AMT
1 1 D1 16844 43330
1 2 D2 16844
1 7 D7 16844 2166.5
1 21 D21 16844 0.5
1 1 D1 937 58188
1 7 D7 937 2909.4
1 21 D21 937
1 23 D23 937 -0.02
想要像这样出现
DocNo,ITEMCD, D1, D2, D7, D21, D23,
1 , 16844,43330, , 2166.5, 0.5, ,
1 , 937,58188,2909.4, , ,-0.02,
DESCR字段值作为列,其AMT作为值
答案 0 :(得分:0)
尝试如下:
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX);
SET @cols = STUFF((SELECT distinct ',' + QUOTENAME(c.DESCR)
FROM temp c
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = 'SELECT DocNo ,ITEMCD, ' + @cols + ' from
(
select DocNo ,ITEMCD
, AMT
, DESCR
from temp
) x
pivot
(
max(AMT)
for DESCR in (' + @cols + ')
) p '
exec (@query)
输出:
*-*-------*-------*-------*----*----------*----------*
|1| 937 |58188 |NULL | |-0.02 |2909.4 |
*-*-------*-------*-------*----*----------*----------*
|1| 16844 |43330 | |0.5 | NULL |2166.5 |
*-*-------*-------*-------*----*----------*----------*
答案 1 :(得分:0)
Pivot是您最好的选择。没有更多细节,很难完全回答;表名等。