当前位置: 代码迷 >> Sql Server >> 动态行转列,该如何处理
  详细解决方案

动态行转列,该如何处理

热度:124   发布时间:2016-04-24 08:46:14.0
动态行转列
表1
fentry    fbillno    value(字符型)
1            B01       test1
2            B01       test2
3            B01       test3
1            B02       H_test1
2            B02       H_test2

目标表
fbillno     1                 2                3  
B01       test1         test2           test3
B02      H_test1      H_test2

------解决思路----------------------

create TABLE #t(fentry INT,fbillno VARCHAR(10),VALUE VARCHAR(10));
INSERT INTO #T (fentry,fbillno,value) VALUES 
(1 ,'B01','test1'  ),
(2 ,'B01','test2'  ),
(3 ,'B01','test '  ),
(1 ,'B02','H_test1'),
(2 ,'B02','H_test2');

--SELECT * FROM #t;

DECLARE @sql NVARCHAR(MAX);
DECLARE @s NVARCHAR(MAX);

set @s=STUFF((SELECT ',['+CAST(fentry AS VARCHAR(5))+']' FROM #t GROUP BY fentry FOR XML PATH('')),1,1,'');

SET @sql='select fbillno,'+@s+' from #t pivot (max(value) for fentry in ('+@s+')) pt';
EXEC(@sql);

DROP TABLE #t;

/*
B01 test1 test2 test 
B02 H_test1 H_test2 NULL
*/
  相关解决方案