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

cách chia các cột theo kết quả của truy vấn trong cơ sở dữ liệu oracle

Sử dụng PIVOTROW_NUMBER chức năng phân tích:

SQL Fiddle

Thiết lập lược đồ Oracle 11g R2 :

CREATE TABLE your_query_result (sal, cat, id, shop ) AS
SELECT 1900,   '34R5',   10,   'dense' FROM DUAL UNION ALL
SELECT 1900,   '34r5',   10,   'SVM' FROM DUAL UNION ALL
SELECT 1900,   '34r5',   10,   'bpo' FROM DUAL UNION ALL
SELECT 2345,   '3ER4',   11,   'kpo' FROM DUAL UNION ALL
SELECT 2345,   '3ER4',   11,   'infra' FROM DUAL UNION ALL
SELECT 12345,  '34F4',   12,   'const' FROM DUAL;

Truy vấn 1 :

SELECT sal,
       cat,
       id,
       "1_SHOP" AS shop_1,
       "2_SHOP" AS shop_2,
       "3_SHOP" AS shop_3
FROM   (
  SELECT r.*,
         ROW_NUMBER() OVER (
           PARTITION BY sal, cat, id
           ORDER BY shop
         ) AS rn
  FROM   (
    SELECT * FROM your_query_result
  ) r
)
PIVOT (
  MAX( shop ) AS shop
  FOR rn IN ( 1, 2, 3 )
)

Kết quả :

|   SAL |  CAT | ID | SHOP_1 | SHOP_2 | SHOP_3 |
|-------|------|----|--------|--------|--------|
|  1900 | 34R5 | 10 |  dense | (null) | (null) |
|  1900 | 34r5 | 10 |    SVM |    bpo | (null) |
|  2345 | 3ER4 | 11 |  infra |    kpo | (null) |
| 12345 | 34F4 | 12 |  const | (null) | (null) |

Nếu bạn muốn hàng đầu tiên và hàng thứ hai trên cùng một dòng thì chỉ cần thay đổi CAT cột được viết thường trước khi tạo ROW_NUMBERPIVOT ing.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm thế nào để tạo một chuỗi Oracle bắt đầu với giá trị tối đa từ một bảng?

  2. Cập nhật nhiều hàng bằng CASE WHEN - ORACLE

  3. Nhận danh sách tất cả các hàm và thủ tục trong cơ sở dữ liệu Oracle

  4. Tạo chỉ mục trên bảng hiện có Oracle

  5. Cách kết nối Cơ sở dữ liệu Oracle với dự án Visual Studio C #