обратный ряд к столбцу - PullRequest
1 голос
/ 14 марта 2011

У меня есть больший SQL, который производит вывод, аналогичный этому упрощенному примеру:

SELECT
  5 AS L0,
  2 AS L1,
  3 AS L2,
  4 AS L3
FROM DUAL

токовый выход - это строка:

| L0 | L1 | L2 | L3 |
|  5 |  2 |  3 |  4 |


желаемым выводом являются следующие столбцы:

| kind | value |
|   0  |   5   |
|   1  |   2   |
|   2  |   3   |
|   3  |   4   |

Я знаю, что смогу получить это путем объединения избранных 4 раза. Я ищу совет, если объединение - лучшее, что я могу сделать здесь, и если этот результат может быть достигнут другими способами.

Я также нашел много примеров инверсии столбца в строку, но здесь я ищу инверсию от строки к столбцу.

Ответы [ 2 ]

10 голосов
/ 14 марта 2011

Пожалуйста, попробуйте UnPIVOT:

SELECT substr(kind,2,1) AS kind,"value" FROM 
(    
    SELECT
        5 AS l0,
        2 AS l1,
        3 AS l2,
        4 AS l3
    FROM dual
)temp unpivot include NULLS ("value" FOR kind IN (l0, l1 , l2, l3));

Обратно:

 SELECT *   
 FROM 
 (
      SELECT Kind,
             max(Value) Value
      FROM table 
      GROUP BY Kind
 ) PIVOT ( max(Value) FOR Kind IN (L0, L1, L2, L3) );

Предполагая, что у вас есть таблица для запроса.

1 голос
/ 15 марта 2011

<pre> select i - 1 kind,<br> case when i = 1 then L0 when i = 2 then L1 when i = 3 then L2 when i = 4 then L3 end as value from your_table, (select level as i from dual connect by level <= 4) Это делает Carteasan Product вашей таблицы и «встроенный вид».Встроенное представление выведет четыре строки, от 1 до 4.

...