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?

È stato utile?

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'
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top