Question

J'ai une table dans Oracle 10g qui contient des informations comme suit:

SQL> select * from t_test;

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

Je voudrais extraire toutes les lignes qui ont GRUPO = « VTOS » et transposer ces lignes à colonnes. Les valeurs CODIGO sont prédéterminées (je sais quelles valeurs peuvent être stockées dans cette colonne), serait donc que pour obtenir quelque chose comme ceci:

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

Je sais que je peux le faire avec certains sous-requêtes, par exemple:

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

mais je voudrais trouver un moyen plus efficace. Quelqu'un peut-il suggérer comment le faire?

Était-ce utile?

La solution

En supposant que vous avez un nombre relativement faible des valeurs de Codigo, quelque chose comme ce qui suit devrait fonctionner:

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';

Si vous avez plusieurs valeurs grupo, par groupe grupo et l'inclure dans votre clause select.

Autres conseils

essayez ceci ..

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'
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top