Transfer selection results using Oracle

my question, with some background:

I need to generate several sql queries based on table metadata (column format), and the result will be something like this:

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

(Yes, it is ordered). I need to rearrange this data based on the first column, so the expected result will be as follows:

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

Is it possible to use Oracle SQL?

Thanks in advance!

+2
source share
2 answers

If you want to generate a query for each call or use hardcoded max-column-count, you can do something like this:

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

If enough to get it in this form

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

take a look at Tom Kyte stragg .

+2

, , pivot. . MSSQL, URL- Oracle, MSDN , -, Oracle, , , .

: Oracle, , .

+1

Source: https://habr.com/ru/post/1734607/


All Articles