PL / SQL Oracle: - динамически UNPIVOT ORACLE TABLE при передаче значения - PullRequest
0 голосов
/ 23 октября 2019

У меня есть таблица, как показано ниже, с данными: -

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

, и мне нужно открепить в зависимости от значения, которое я даю ... Если я даю 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
    )
   )
  ); 

1 Ответ

1 голос
/ 23 октября 2019

Почему бы вам не unpivot все возможные столбцы, а затем ограничить набор данных с помощью предложения where:

SELECT ITEM, SCOL, QTY 
  FROM WIDE
    UNPIVOT INCLUDE NULLS
      (QTY FOR SCOL IN (COL1, ..., COL 30))
 WHERE TO_NUMBER(SUBSTR(SCOL,4)) <= 7 -- 7 Should be replaced with your parameter
...