Oracle
 sql >> база данни >  >> RDS >> Oracle

как да разделя колоните в резултат на заявка в база данни на oracle

Използвайте PIVOT и ROW_NUMBER аналитична функция:

SQL Fiddle

Настройка на схема на Oracle 11g R2 :

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

Заявка 1 :

ИЗБЕРЕТЕ sal, котка, id, "1_МАГАЗИН" КАТО shop_1, "2_МАГАЗИН" КАТО shop_2, "3_МАГАЗИН" КАТО shop_3FROM ( ИЗБЕРЕТЕ r.*, ROW_NUMBER() OVER ( PARTITION BY sal, котка, id ПОРЪЧАЙТЕ ПО shop ) AS rn FROM ( SELECT * FROM your_query_result ) r)PIVOT ( MAX( shop ) AS shop FOR rn IN ( 1, 2, 3 )) 

Резултати :

<предварителен код>| SAL | КОТКА | ID | МАГАЗИН_1 | МАГАЗИН_2 | МАГАЗИН_3 ||-------|------|----|--------|--------|--------| | 1900 | 34R5 | 10 | плътен | (нула) | (нула) || 1900 | 34r5 | 10 | SVM | bpo | (нула) || 2345 | 3ER4 | 11 | по-долу | kpo | (нула) || 12345 | 34F4 | 12 | const | (нула) | (null) |

Ако искате първият и вторият ред да са на един ред, просто променете CAT колоната да е с малки букви, преди да генерира ROW_NUMBER и PIVOT инж.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Неуспешно преобразуване във вътрешно представяне

  2. Oracle Комбинирайте няколко колони в една

  3. Изисква ли се ODP.NET за Oracle 11g Client?

  4. Oracle SQL тригер при актуализиране на колона

  5. Oracle XML:Пропускане Не съществува възел