2014-03-29 77 views
1

源表PIVOT两列到多行

Subject_Name Semester 
------------------------ 
A1    1 
B1    2 
C1    3 
D1    1 
E1    2 

所需的输出

1 2 3 
--------------- 
A1 B1 C1 
D1 E1 
+0

您正在使用哪个数据库管理系统? Postgres的?甲骨文? –

回答

1

试试这个

;WITH cte 
    AS (SELECT subject_name, 
       semester, 
       Row_number() OVER (partition BY semester ORDER BY subject_name DESC) AS Rn 
     FROM sourcetable) 
SELECT [1], 
     [2], 
     [3] 
FROM cte 
     PIVOT (Max(subject_name) 
      FOR semester IN ([1],[2],[3])) pvt 

或者:

SELECT * 
FROM (SELECT subject_name, 
       semester, 
       Row_number() OVER(partition BY semester ORDER BY subject_name DESC) AS Rn 
     FROM sourcetable) src 
     PIVOT (Max(subject_name) 
      FOR semester IN ([1],[2],[3])) piv 

Fiddle Demo

输出

1 2 3 
A1 B1 C1 
D1 E1 null 
+0

感谢您的回复。它工作正常。 – user3128590

+0

Np ....开心编码 –