使用参数化将ORACLE SQL中的行转换为列
对于我的一个ETL作业,我需要一个将行转换为列的SQL查询。困难在于我想参数化将多少行转换为一列,如以下示例所示: ATM我的场景如下所示: 甲骨文11g 单列表: 参数 AB AE 碳纤维 生长激素 5G H3 7便士 SQL查询:使用参数化将ORACLE SQL中的行转换为列,sql,oracle,Sql,Oracle,对于我的一个ETL作业,我需要一个将行转换为列的SQL查询。困难在于我想参数化将多少行转换为一列,如以下示例所示: ATM我的场景如下所示: 甲骨文11g 单列表: 参数 AB AE 碳纤维 生长激素 5G H3 7便士 SQL查询: SELECT listagg ('''' ||PARAMETER ||'''', ',') WITHIN GROUP ( ORDER BY ROWNUMBER) AS PARAMETER, FROM (SELECT CASE WH
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:我知道我的英语非常好:}你可以用算术计算组-做除法并从中取整数。以下使用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;
这就是我想要的。愚蠢的是我自己没有想出这样的解决方案。我想我还没有学到很多。非常感谢!