Pregunta

mi pregunta es, con algunos antecedentes:

Tengo que generar algunas consultas SQL basada en la tabla de metadatos (formato de columna), y el resultado es algo como:

TABLENAME1|COL1
TABLENAME1|COL2
TABLENAME2|COL1
TABLENAME2|COL2
TABLENAME2|COL3
TABLENAME3|COL1
TABLENAME4|COL1
TABLENAME4|COL2
... /*some other 1800 rows */

(Sí, se ordenó.) Lo que necesito es transponer estos datos, basado en la primera columna, por lo que sería el resultado esperado:

TABLENAME1|COL1|COL2|NULL
TABLENAME2|COL1|COL2|COL3
TABLENAME3|COL1|NULL|NULL
TABLENAME4|COL1|COL2|NULL
/* less then 1800 rows ;-) */

¿Es posible utilizar Oracle SQL?

Gracias de antemano!

¿Fue útil?

Solución

Si desea generar la consulta para cada llamada o utilizar un max-column-count hardcoded, entonces se puede hacer algo así:

WITH tab AS
(
  SELECT table_name, column_name FROM user_tab_cols WHERE column_id <= 4
) -- user_tab_cols used to provide test data, use your table instead
SELECT MAX(c1) c1,
       MAX(c2) c2,
       MAX(c3) c3,
       MAX(c4) c4
  FROM (SELECT table_name,
               DECODE( column_id, 1, column_name ) c1,
               DECODE( column_id, 2, column_name ) c2,
               DECODE( column_id, 3, column_name ) c3,
               DECODE( column_id, 4, column_name ) c4
          FROM ( SELECT table_name,
                        column_name,
                        ROW_NUMBER() OVER ( PARTITION BY table_name ORDER BY column_name ) column_id
                   FROM tab
               )
       )
 GROUP BY table_name
 ORDER BY table_name

Si es suficiente para conseguir que en esa forma

TABLENAME1|COL1,COL2
TABLENAME2|COL1,COL2,COL3

echar un vistazo a de Tom Kyte Stragg .

Otros consejos

La palabra clave que estás buscando es pivot. Aquí es un ejemplo de su uso. La sintaxis aparece generalmente los mismos que MSSQL, y puesto que no conoce la dirección URL para la documentación de Oracle voy a tirar la enlace noreferrer nofollow MSDN y la esperanza de que alguien que sabe más acerca de diseño de página de Oracle que yo lo editará a punto para su documentación.

EDIT: documentación de Oracle , la búsqueda de los tiempos suficientes pivote y que llegaremos a los detalles.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top