参见英文答案 >
Convert Rows to columns using ‘Pivot’ in SQL Server7个
假设我有一个包含以下行和列的表
假设我有一个包含以下行和列的表
EmpCode Empname Goals ------- ---- ------ 101 kiran readsql 101 kiran coding 101 kiran readcss 102 rohit coding 102 rohit readjava 103 pradi do nothing
我想以下面的格式显示上表:
EmpCode Empname Goal1 Goal2 Goal3 ------- ---- ------ ------ ------ 101 kiran readsql coding readcss 101 rohit coding readjava 103 pradi do nothing
实地目标是动态的,请帮助我.谢谢.
解决方法
CREATE TABLE #tt(id INT IDENTITY(1,1) PRIMARY KEY,EmpCode INT,Empname VARCHAR(2566),Goals VARCHAR(256)); INSERT INTO #tt(EmpCode,Empname,Goals)VALUES (101,'kiran','readsql'),(101,'coding'),'readcss'),(102,'rohit','readjava'),(103,'pradi','do nothing'); DECLARE @goal_cols NVARCHAR(MAX)=STUFF(( SELECT DISTINCT N',Goal'+CAST(ROW_NUMBER()OVER(PARTITION BY empcode ORDER BY id) AS VARCHAR(3)) FROM #tt FOR XML PATH('') ),1,'' ); DECLARE @stmt NVARCHAR(MAX)=N' SELECT * FROM ( SELECT EmpCode,Goals,goal_id=''Goal''+CAST(ROW_NUMBER()OVER(PARTITION BY empcode ORDER BY id) AS VARCHAR(3)) FROM #tt ) AS s PIVOT(MAX(Goals) FOR goal_id IN ('+@goal_cols+')) AS p ORDER BY EmpCode;'; EXECUTE sp_executesql @stmt; DROP TABLE #tt;
结果:
+---------+---------+------------+----------+---------+ | EmpCode | Empname | Goal1 | Goal2 | Goal3 | +---------+---------+------------+----------+---------+ | 101 | kiran | readsql | coding | readcss | | 102 | rohit | coding | readjava | NULL | | 103 | pradi | do nothing | NULL | NULL | +---------+---------+------------+----------+---------+