Pregunta

Tengo una tabla en Oracle 10g que contiene alguna información de la siguiente manera:

SQL> select * from t_test;

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

Me gustaría extraer todas las filas que tienen GRUPO = 'VTOS' y transponer las filas de columnas. Los valores en CODIGO están predeterminados (sé qué valores se pueden almacenar en esa columna), por lo que le gustaría obtener algo como esto:

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

Sé que puedo hacerlo con algunas subconsultas, por ejemplo:

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

pero me gustaría encontrar una manera más eficiente. ¿Puede alguien sugerir cómo hacerlo?

¿Fue útil?

Solución

Asumiendo que tiene un número relativamente pequeño de valores Codigo, algo como lo siguiente debería funcionar:

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 usted tiene múltiples valores de Grupo, grupo por grupo e incluirlo en su cláusula select.

Otros consejos

probar este ..

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'
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top