对于我的一个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
CF,GH,NM,SD,WE ... ..
我想要的是一个带有数字的查询,例如。 5用 结果如下:
PARAMETER
AB,BG,RT,ZH,JK
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:我知道我的英语很好“:}答案 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;