使用参数化将ORACLE SQL中的行转换为列

时间:2013-08-07 14:28:17

标签: sql oracle

对于我的一个ETL-Jobs,我需要一个将行转换为列的SQL查询。困难在于我想参数化转换成一列的行数,如下例所示:

ATM我的场景如下:

Oracle 11g

一个列表:

PARAMETER

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

结果如下所示:

PARAMETER

AB,BG,RT,ZH,JK

AE,HL,GH,DZ,KL

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

  

我想要的是一个带有数字的查询,例如。 5用   结果如下:

PARAMETER

AB,BG,RT,ZH,JK

AE,HL,GH,DZ,KL

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

  

或者需要例如。 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 个答案:

答案 0 :(得分: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;