sql >> Databasteknik >  >> RDS >> Oracle

Transponera utvalda resultat med Oracle

Om du vill generera frågan för varje samtal eller använda ett hårdkodat max-kolumnantal, så kan du göra något så här:

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

Om det räcker att få det i den formen

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

ta en titt på Tom Kytes stragg.



  1. Infoga CreatedBy och CreatedOn i alla saknade datatabeller i SQL

  2. Åtgärda "FEL: saknar FROM-klausulpost för tabell" i PostgreSQL när du använder UNION, EXCEPT eller INTERSECT

  3. SQL Server Reguljära uttryck i T-SQL

  4. XMLAGG med RTRIM-problem