Oracle
 sql >> Baza danych >  >> RDS >> Oracle

transponuj kolumnę do wiersza oracle

W czystym SQL , będzie wymagało dużo kodowania, ponieważ będziesz musiał ręcznie umieścić zakres ponieważ nie ma w ogóle związku między wartościami a zakresem. Gdyby istniał związek, możesz użyć CASE ekspresja i budowanie zasięgu dynamicznie .

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

Z bazy danych Oracle 11g, wydanie 1 i powyżej, możesz użyć 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

Powyżej w Twoim przypadku musisz zastąpić NA klauzula z istniejącym zapytaniem jako podzapytanie . Musisz uwzględnić inne kolumny w UNION .

W PL/SQL , możesz (nad)użyć WYKONAJ NATYCHMIAST i uzyskaj „zakres”, wyodrębniając nazwy kolumn w dynamicznym sql .

Chociaż znacznie lepiej byłoby zmodyfikować/przepisać istniejące zapytanie, którego jeszcze nie pokazałeś.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Plan realizacji Oracle

  2. Wydajność dynamicznego SQL a procedury składowane w Oracle

  3. Oracle - zaktualizuj rekord i zwróć zaktualizowaną datę w tym samym zapytaniu

  4. Znajdź klucz obcy pasujący do wielu wartości wierszy

  5. Jak dołączyć do obiektów ResultSet w javie?