Таблица преобразования - Oracle - PullRequest
0 голосов
/ 09 сентября 2010

У меня есть таблица с такой структурой:

date  colname   value
----------------------------
date  col1name  col1's value  
date  col2name  col2's value  
date  col3name  col3's value  

Теперь мне нужно преобразовать ее в эту структуру:

date col1name       col2name      col3name  
-----------------------------------------------
date col1's value   col2's value  col3's value  

Возможно ли это?

1 Ответ

2 голосов
/ 09 сентября 2010

Вы хотите сводную таблицу:

  SELECT t.date,
         MAX(CASE WHEN t.colname = 'col1name' THEN t.value END) AS col1name,
         MAX(CASE WHEN t.colname = 'col2name' THEN t.value END) AS col2name,
         MAX(CASE WHEN t.colname = 'col3name' THEN t.value END) AS col3name
    FROM TABLE t
GROUP BY t.date

Если вы хотите сделать его динамическим на основе значения colname, вам нужно будет использовать динамический SQL , поскольку вам нужно сначала получить список значений colname перед построением фактического запроса.

Oracle не добавляла поддержку PIVOT / UNPIVOT до 11g. Выражение CASE поддерживается 9i +; до 9i вы должны будете использовать DECODE ...

...