【上一專題】 行列轉換1 -- PIVOT與UNPIVOT函數的介紹
--listagg方法 11g之後推薦使用這種 SELECT NO, listagg(EMP, ',') within GROUP (ORDER BY NULL) AS vals FROM onepiece GROUP BY NO ; --wmsys.wm_concat方法 --11之前可使用這種 SELECT NO, WMSYS.WM_CONCAT(emp) AS vals FROM onepiece GROUP BY NO; --使用集合函數;在用to_string函數將集合轉換為字符串。需10g以上 SELECT NO, TO_STRING(CAST(COLLECT(emp) AS varchar2_ntt)) AS vals FROM onepiece GROUP BY NO;
上面我們看到listagg函數語法中有over函數;當然我們的listagg也可以做分析函數
SELECT NO, listagg(EMP, ',') within GROUP (ORDER BY NULL) over (partition by no) FROM onepiece
第3種實現的方法中有to_string函數;其中源代碼如下:
CREATE OR REPLACE FUNCTION to_string ( nt_in IN varchar2_ntt, delimiter_in IN VARCHAR2 DEFAULT ',' ) RETURN VARCHAR2 IS v_idx PLS_INTEGER; v_str VARCHAR2(32767); v_dlm VARCHAR2(10); BEGIN v_idx := nt_in.FIRST; WHILE v_idx IS NOT NULL LOOP v_str := v_str || v_dlm || nt_in(v_idx); v_dlm := delimiter_in; v_idx := nt_in.NEXT(v_idx); END LOOP; RETURN v_str; END to_string;
最後:上面的效果反之呢?因為還有一個知識點沒有講解;暫時不提供。
作者 : li0924
時間 : 2015-01-12
本文版權歸作者所有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接.