sql >> Database teknologi >  >> RDS >> Oracle

hvordan man deler kolonnerne i resultat af forespørgsel i Oracle-databasen

Brug en PIVOT og ROW_NUMBER analytisk funktion:

SQL violin

Oracle 11g R2 Schema Setup :

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;
 

Forespørgsel 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 )
)
 

Resultater :

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

Hvis du vil have den første og anden række på samme linje, skal du bare ændre CAT kolonnen skal være med små bogstaver, før du genererer ROW_NUMBER og PIVOT ing.




  1. Hvordan kan jeg starte PostgreSQL på Windows?

  2. SQL Server 2008 + PCI-overholdelse? Vedrører PCI, såvel som symmetriske nøgler!

  3. MYSQL - Opret enkelt sql-forespørgsel fra flere forespørgsler

  4. asp.net / EntityFramework - Hvorfor går min applikationspulje ned?