行列转置

行列转置

CREATE TABLE  a as (select 1 id ,'項目一' XMMC,'XMONE' CODE,1 RYID FROM DUAL
           UNION
           select 2 id ,'項目二' XMMC,'XMTWO' CODE,1 RYID FROM DUAL
           UNION
           select 3 id ,'項目三' XMMC,'XMTHREE' CODE,1 RYID FROM DUAL
           UNION
           select 4 id ,'項目一' XMMC,'XMONE' CODE,2 RYID FROM DUAL
           )
WITH B AS (SELECT 1 ID,'張三' NAME FROM DUAL
           UNION
           SELECT 2 ID,'李四' NAME FROM DUAL          
           )
SELECT C.RYID,
       B.NAME,
       MAX(DECODE(RN, 1, XMMC, NULL)) XMONE,
       MAX(DECODE(RN, 2, XMMC, NULL)) XMTWO,
       MAX(DECODE(RN, 3, XMMC, NULL)) XMTHREE
  FROM (SELECT RYID,
               XMMC,
               CODE,
               ROW_NUMBER() OVER(PARTITION BY RYID ORDER BY RYID) RN  --以RYID分组后内部的排序
          FROM A) C,
       B
 WHERE C.RYID = B.ID
 GROUP BY C.RYID, B.NAME
 ORDER BY C.RYID

--     RYID NAME XMONE  XMTWO  XMTHREE
---------- ---- ------ ------ -------
--         1 張三 項目一 項目二 項目三
--         2 李四 項目一        

你可能感兴趣的:(行列转置)