Domanda

la mia domanda è, con un po 'di fondo:

devo generare alcuni query SQL in base ai metadati tavolo (formato colonna), e il risultato è qualcosa di simile:

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

(Sì, è ordinato.) Che cosa ho bisogno è quello di trasporre questi dati, in base alla prima colonna, in modo che il risultato atteso sarebbe:

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

E 'possibile utilizzando Oracle SQL?

Grazie in anticipo!

È stato utile?

Soluzione

Se si desidera generare la query per ogni chiamata o utilizzare un max-column-count hardcoded, allora si può fare qualcosa di simile:

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 è sufficiente per ottenere in quella forma

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

dare un'occhiata a Tom Kyte stragg .

Altri suggerimenti

La parola chiave che si sta cercando è pivot. Ecco un esempio del suo utilizzo. La sintassi appare generalmente la stessa di MSSQL, e dato che non si conosce l'URL per la documentazione di Oracle io lancio la collegamento MSDN e sperare che qualcuno che conosce di più su layout di pagina di Oracle di me sarò modificarlo per puntare a loro documentazione.

EDIT: documentazione di Oracle , la ricerca di tempi abbastanza pivot e si arriva ai dettagli.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top