Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

transpos kolom ke baris oracle

Dalam SQL pure murni , itu akan membutuhkan banyak pengkodean karena Anda harus meletakkan rentang . secara manual karena tidak ada hubungan antara nilai dan rentang sama sekali. Seandainya ada hubungan, Anda bisa menggunakan CASE ekspresikan dan bangun rentang secara dinamis .

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

Dari Database Oracle 11g Rilis 1 dan di atasnya, Anda dapat menggunakan 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

Di atas, dalam kasus Anda, Anda perlu mengganti DENGAN klausa dengan kueri Anda yang ada sebagai sub-kueri . Anda harus menyertakan kolom lain di UNION .

Di PL/SQL , Anda dapat (ab) menggunakan EKSEKUSI SEGERA dan dapatkan "rentang" dengan mengekstrak nama kolom di sql dinamis .

Meskipun demikian, akan jauh lebih baik untuk mengubah/menulis ulang kueri yang ada yang belum Anda tampilkan.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apa itu Oracle SQL &PL/SQL? Semua Yang Perlu Diketahui Pemula

  2. java.lang.ClassCastException:Oracle.sql.BLOB tidak dapat dilemparkan ke Oracle.sql.BLOB

  3. Menggunakan DBMS_LOB.SUBSTR pada BLOB menghasilkan ORA-06502

  4. Setel kedaluwarsa / masa tenggang kata sandi pengguna Oracle

  5. Mengapa kueri Oracle 12c memerlukan tanda kutip ganda di sekitar tabel?