sql selectL строк в столбцы без подзапроса - PullRequest
0 голосов
/ 21 июня 2010

У меня есть таблица в Oracle 10g, которая содержит некоторую информацию следующим образом:

SQL> select * from t_test;

      INFO     CODIGO GRUPO
---------- ---------- ----------
       101        190 VTOS
       100        130 VTOS
       102        140 VTOS

Я хотел бы извлечь все строки, имеющие GRUPO = 'VTOS', и перенести эти строки в столбцы.Значения в CODIGO предопределены (я знаю, какие значения могут быть сохранены в этом столбце), поэтому хотелось бы получить что-то вроде этого:

INFO_190 INFO_130 INFO_140
-------- -------- --------
     101      100      102

Я знаю, что могу сделать это с некоторыми подзапросами, например:

SELECT (SELECT info
          FROM t_test
         WHERE codigo = 190 AND grupo = 'VTOS') info_190,
       (SELECT info
          FROM t_test
         WHERE codigo = 130 AND grupo = 'VTOS') info_130,
       (SELECT info
          FROM t_test
         WHERE codigo = 140 AND grupo = 'VTOS') info_140
  FROM DUAL

но я бы хотел найти более эффективный способ.Кто-нибудь может подсказать, как это сделать?

Ответы [ 2 ]

1 голос
/ 21 июня 2010

Если у вас относительно небольшое количество значений codigo, должно работать что-то вроде следующего:

select max(decode(codigo, 190, info, '')) info_190,
 max(decode(codigo, 130, info, '')) info_130,
 max(decode(codigo, 140, info, '')) info_140
from t_test
where grupo = 'VTOS';

Если у вас есть несколько значений grupo, сгруппируйте их по группам и включите в предложение select.

0 голосов
/ 21 июня 2010

попробуйте это ..

select case CODIGO when 190 then INFO end AS INFO_190,
case CODIGO when 130 then INFO end AS INFO_130,
case CODIGO when 140 then INFO end AS INFO_140
from t_test where grupo = 'VTOS'
...