sql >> Databasteknik >  >> RDS >> Oracle

omvandla kolumn till rad orakel

I ren SQL , kommer det att behövas mycket kodning eftersom du måste manuellt sätta intervallet eftersom det inte finns något samband mellan värdena och intervallet alls. Hade det funnits ett förhållande kunde du använda CASE uttryck och bygg intervallet dynamiskt .

SQL> WITH DATA AS
  2    (SELECT 50 "1-99transval",
  3      90 "100-200transval",
  4      80 "200-300transval",
  5      67 "1-99nontransval",
  6      58 "100-200nontransval",
  7      88 "200-300nontransval"
  8    FROM dual
  9    )
 10  SELECT '1-99' range,
 11    "1-99transval" transval,
 12    "1-99nontransval" nontransval
 13  FROM DATA
 14  UNION
 15  SELECT '100-200' range,
 16    "100-200transval",
 17    "100-200nontransval" nontransval
 18  FROM DATA
 19  UNION
 20  SELECT '200-300' range,
 21    "200-300transval",
 22    "200-300nontransval" nontransval
 23  FROM DATA;

RANGE     TRANSVAL NONTRANSVAL
------- ---------- -----------
1-99            50          67
100-200         90          58
200-300         80          88

Från Oracle-databasen 11g Release 1 och ovan kan du använda UNPIVOT

SQL> WITH DATA AS
  2    (SELECT 50 "1-99transval",
  3      90 "100-200transval",
  4      80 "200-300transval",
  5      67 "1-99nontransval",
  6      58 "100-200nontransval",
  7      88 "200-300nontransval"
  8    FROM dual
  9    )
 10  SELECT *
 11  FROM   DATA
 12  UNPIVOT( (transval,nontransval)
 13  FOR RANGE IN ( ("1-99transval","1-99nontransval") AS '1-99'
 14                ,("100-200transval","100-200nontransval") AS '100-200'
 15                ,("200-300transval","200-300nontransval") AS '200-300'));

RANGE     TRANSVAL NONTRANSVAL
------- ---------- -----------
1-99            50          67
100-200         90          58
200-300         80          88

Ovan, i ditt fall måste du byta ut MED med din befintliga fråga som en underfråga . Du måste inkludera andra kolumner i UNION .

I PL/SQL , kan du (ab)använda EXECUTE OMEDELBART och hämta "intervallet" genom att extrahera kolumnnamnen i dynamic sql .

Även om det skulle vara mycket bättre att ändra/skriva om din befintliga fråga som du inte har visat ännu.



  1. Spark Dataframes UPSERT till Postgres Table

  2. Skriver läsbar kod för VBA – Prova* mönster

  3. Räkna rader i partitionen med Order By

  4. Hur lägger man till en vagnretur till ett värde i MySQL?