Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

como dividir as colunas no resultado da consulta no banco de dados oracle


Use um PIVOT e o ROW_NUMBER função analítica:

SQL Fiddle

Configuração do esquema 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;

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

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

Se você quiser a primeira e a segunda linha na mesma linha, basta alterar o CAT coluna esteja em letras minúsculas antes de gerar o ROW_NUMBER e PIVOT ing.