Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Bảng tổng hợp có các giá trị không chính yếu

Một giải pháp không yêu cầu nhiều tự kết hợp:

Bạn có thể PIVOT trên kết quả của ROW_NUMBER() chức năng phân tích để có được kết quả mong muốn của bạn:

SELECT *
FROM   (
  SELECT t.*,
         ROW_NUMBER() OVER ( PARTITION BY test ORDER BY ROWNUM ) AS rn
  FROM   your_table t
)
PIVOT ( MAX( Reader ) AS reader, MAX( result ) AS result FOR rn IN ( 1, 2, 3 ) );

Đầu ra :

TEST 1_READER 1_RESULT 2_READER 2_RESULT 3_READER 3_RESULT
---- -------- -------- -------- -------- -------- --------
   1 John          1.6 Jack          5.2
   2 Ursula        2.5 Jack          5.1
   3 Albert        3.0

Hoặc, chỉ sử dụng các hàm tổng hợp:

SELECT test,
       MAX( CASE rn WHEN 1 THEN reader END ) AS reader_1,
       MAX( CASE rn WHEN 1 THEN result END ) AS result_1,
       MAX( CASE rn WHEN 2 THEN reader END ) AS reader_2,
       MAX( CASE rn WHEN 2 THEN result END ) AS result_2,
       MAX( CASE rn WHEN 3 THEN reader END ) AS reader_3,
       MAX( CASE rn WHEN 3 THEN result END ) AS result_3
FROM   (
  SELECT t.*,
         ROW_NUMBER() OVER ( PARTITION BY test ORDER BY ROWNUM ) AS rn
  FROM   your_table t
)
GROUP BY test;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Không thể đăng nhập vào cơ sở dữ liệu bằng SYS với Oracle SQL Developer

  2. Oracle PL / SQL lấy IP v4 của máy chủ?

  3. Thư viện ODP.NET Managed không giải quyết được bí danh, nhưng thư viện 32 bit thì không

  4. Truy vấn tên cột từ một bảng từ người dùng khác

  5. Oracle PL / SQL - Tăng ngoại lệ do người dùng xác định với SQLERRM tùy chỉnh