Pergunta

Minha pergunta é, com alguns antecedentes:

Eu tenho que gerar algumas consultas SQL com base nos metadados da tabela (formato da coluna), e o resultado é algo como:

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

(Sim, é ordenado.) O que eu preciso é transpor esses dados, com base na primeira coluna, para que a saída esperada seja:

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

É possível usar o Oracle SQL?

Desde já, obrigado!

Foi útil?

Solução

Se você deseja gerar a consulta para cada chamada ou usar uma contagem de coluna Max codificada, pode fazer algo assim:

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

Se for suficiente obtê -lo nessa forma

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

Dê uma olhada no Tom Kyte's Stragg.

Outras dicas

A palavra -chave que você está procurando é pivot. Aqui está um exemplo de seu uso. A sintaxe parece geralmente a mesma que mssql e, como não conheço o URL para a documentação do Oracle, vou lançar o Msdn Link e espere que alguém que saiba mais sobre o layout da página do Oracle do que eu edite -o para apontar para a documentação deles.

EDITAR: Documentação do Oracle, procure um pivô suficientes e você chegará aos detalhes.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top