2013-08-07 81 views
0

對於我的一個ETL作業,我需要一個將行轉換爲列的SQL查詢。困難的是,我要參數多少行得到轉換成一列如以下的例子:將行轉換爲ORACLE中的列使用參數化的SQL

ATM我的情況是這樣的:

的Oracle 11g

一欄表:

參數

AB

AE

CF

GH

5G

H3

7P

... ..

SQL查詢:

SELECT listagg ('''' 
    ||PARAMETER 
    ||'''', ',') WITHIN GROUP (
ORDER BY ROWNUMBER) AS PARAMETER, 
FROM 
    (SELECT 
    CASE 
     WHEN ROWNUM <= 5 THEN 5 
     WHEN ROWNUM <= 10 THEN 10 
     WHEN ROWNUM <= 15 THEN 15 
     WHEN ROWNUM <= 20 THEN 20 
     WHEN ROWNUM <= 25 THEN 25 
    END AS ROWNUMBER 
    PARAMETER 
    FROM SR0_CRTL_SL_OL_PSM_PARAMETER 
) 
GROUP BY ROWNUMBER 

結果是這樣的:

參數

AB,BG,RT,ZH,JK

AE,HL,GH,DZ,KL

CF,GH ,NM,SD,WE ... ..

我想要的是一個Query tak一個數字,例如。 5 以下結果:

PARAMETER

AB,BG,RT,ZH,JK

AE,HL,GH,DZ,KL

CF,GH, NM,SD,我們 ... ..

或者需要如。 8,其結果將是這樣的:

PARAMETER

AB,BG,RT,ZH,JK,AE,HL,GH

DZ,KL,CF,GH,NM, SD,WE,DE

FG,JK,KL,UZ,IT,FG,HR,TZ ......

我希望你明白我的意思。也許有人可以給我一些幫助。

感謝

PS:我知道,我的英語是該死的好「:}

回答

1

您可以使用算術計算組 - 做一個劃分,並從中取整數。下面以「8」作爲參數:

SELECT listagg (''''||PARAMETER||'''', ',') WITHIN GROUP (ORDER BY RowNumber) AS PARAMETER, 
FROM (SELECT trunc((rownum - 1)/8) as grp, t.*, 
      rownum as RowNumber 
     FROM SR0_CRTL_SL_OL_PSM_PARAMETER t 
    ) t 
GROUP BY grp; 
+0

這就是我一直在尋找。愚蠢的是我沒有提出這樣的解決方案。猜猜我還沒有學到很多東西。非常感謝! –