SELECT righe per colonne senza subquery
Domanda
Ho una tabella in Oracle 10g che contiene alcune informazioni come segue:
SQL> select * from t_test;
INFO CODIGO GRUPO
---------- ---------- ----------
101 190 VTOS
100 130 VTOS
102 140 VTOS
Mi piacerebbe estrarre tutti i file che hanno GRUPO = 'VTOS' e trasporre le righe per colonne. I valori in CODIGO sono predeterminati (lo so che i valori possono essere memorizzati in quella colonna), quindi vorrebbe ottenere qualcosa di simile:
INFO_190 INFO_130 INFO_140
-------- -------- --------
101 100 102
So che posso farlo con alcune sottointerrogazioni, ad esempio:
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
ma mi piacerebbe trovare un modo più efficiente. Qualcuno può suggerire come fare?
Soluzione
Supponendo di avere un numero relativamente piccolo di valori Codigo, qualcosa di simile alla seguente dovrebbe funzionare:
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';
Se si dispone di valori grupo multipla, gruppo da grupo e includerlo nel vostro prescelto clausola.
Altri suggerimenti
provare questo ..
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'