Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用参数化将ORACLE SQL中的行转换为列_Sql_Oracle - Fatal编程技术网

使用参数化将ORACLE 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

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

ATM我的场景如下所示:

甲骨文11g

单列表:

参数

AB

AE

碳纤维

生长激素

5G

H3

7便士

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

你可以用算术计算组-做除法并从中取整数。以下使用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;

这就是我想要的。愚蠢的是我自己没有想出这样的解决方案。我想我还没有学到很多。非常感谢!