Използвайте PIVOT
и ROW_NUMBER
аналитична функция:
Настройка на схема на 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
инж.