0

对于我的 ETL 作业之一,我需要一个将行转换为列的 SQL 查询。困难在于我想参数化有多少行转换为一列,如下例所示:

ATM 我的场景如下所示:

甲骨文 11g

一列表:

范围

AB

AE

CF

生长激素

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 ......

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

范围

AB、BG、RT、ZH、JK

AE、HL、GH、DZ、KL

CF、GH、NM、SD、WE ......

或者它需要例如。8,结果如下:

范围

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:我知道我的英语非常好”:}

4

1 回答 1

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;
于 2013-08-07T14:32:31.917 回答