PL / SQL Oracle:-在传递值时动态地取消Oracle表的设置

问题描述 投票:0回答:1

我有一个带有数据的下表:-

Item    COL1    COL2    COL3    COL4    COL5    COL6    ....    COL 30
A       1       1       2       3       4       2       5       2
B       2       6       4       3       5       2       5       1
C       3       4       5       2       2       2       4       2
D       4       5       2       23      45      3       3       3
F       5       3       1       11      23      34      34      1

并且需要根据我给定的值进行UNPIVOT ...如果给定4,则表将不旋转到COL4;如果给定7,则表将不被旋转直到7,从而使其具有动态性。我已经编写了一个简单的SQL,但无法使它动态化

   SELECT * FROM (
     WITH
      WIDE AS (
     SELECT
      /*+ PARALLEL(128) */
      ITEM, COL1,  COL2,  COL3,  COL4,  COL5,  COL6, COL7
     FROM TAB
     WHERE ITEM  = 'A'
    )
    SELECT
     /*+ PARALLEL(128) */
     ITEM
    FROM WIDE
   UNPIVOT INCLUDE NULLS
   (QTY FOR SCOL IN
    (COL1,  COL2,  COL3,  COL4, COL5,  COL6,
    COL7
    )
   )
  ); 
oracle plsql plsqldeveloper plsql-package
1个回答
0
投票
为什么不unpivot所有可能的列,然后使用where子句限制数据集:

SELECT ITEM, SCOL, QTY FROM WIDE UNPIVOT INCLUDE NULLS (QTY FOR SCOL IN (COL1, ..., COL 30)) WHERE SCOL <= 'COL7'

© www.soinside.com 2019 - 2024. All rights reserved.