sql >> Database teknologi >  >> RDS >> Oracle

transponere kolonne til række orakel

I ren SQL , vil det kræve en masse kodning, fordi du bliver nødt til manuelt at sætte området da der slet ikke er nogen sammenhæng mellem værdierne og området. Havde der været et forhold, kunne du bruge CASE udtryk og byg området dynamisk .

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

Fra Oracle database 11g Release 1 og derover kan du bruge 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

Ovenfor skal du i dit tilfælde erstatte MED klausul med din eksisterende forespørgsel som en underforespørgsel . Du skal inkludere andre kolonner i UNION .

I PL/SQL , kan du (ab)bruge UDFØR STRAKS og få "intervallet" ved at udtrække kolonnenavnene i dynamic sql .

Selvom det ville være meget bedre at ændre/omskrive din eksisterende forespørgsel, som du ikke har vist endnu.



  1. PostgreSQL-funktionen findes ikke

  2. Hvordan implementerer man automatisk visningsopdatering, så snart der er ændring i databasen i AngularJs?

  3. Sådan får du de talte værdier med en kommaseparator som en enkelt rækkeværdi

  4. Android Sqlite ved opgradering af sletningstabel fra databasen