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

jak podzielić kolumny w wyniku zapytania w bazie danych Oracle

Użyj PIVOT i ROW_NUMBER funkcja analityczna:

Skrzypce SQL

Konfiguracja schematu 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;

Zapytanie 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 )
)

Wyniki :

|   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) |

Jeśli chcesz, aby pierwszy i drugi wiersz znajdowały się w tym samym wierszu, po prostu zmień CAT kolumna pisana małymi literami przed wygenerowaniem ROW_NUMBER i PIVOT inż.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sprawdzanie Jdbc pod kątem możliwości — wydanie punktu zapisu

  2. Oracle Instant Client dla urządzenia Debiana opartego na architekturze ARM

  3. Jak dodać słoik ojdbc do mojego projektu i z niego korzystać?

  4. Jaki jest najszybszy sposób wstawiania danych do tabeli Oracle?

  5. Jaki był koszt najdroższego filmu (filmów) w kolekcji?