Возвращение строк в виде столбцов - PullRequest
0 голосов
/ 16 августа 2011

Я бы хотел сделать это одним запросом, но я думаю, что для этого потребуется курсор.Если я не могу сделать это как один запрос, я бы хотел вывести результаты в виде SYS_REFCURSOR.Упрощенный пример:

PRODUCT

ID   NAME         Part Number   SKU
------------------------------------
1    Widgetizer     150         1001
2    Widgetizer200  200         1002
3    WidgetizerDlx  250         1003

PRODUCT_SPEC

P_ID   NAME     VALUE
----------------------------
1      WEIGHT    5
1      HEIGHT    10
1      VERSION   1
1      COLOR     RED
2      WEIGHT    7
2      HEIGHT    10
2      VERSION   2
2      COLOR     BLUE

Запрос:

Для каждого продукта с SKU меньше 1003, возврат:

Product name, part #, SKU, WEIGHT, HEIGHT, COLOR

1 Ответ

5 голосов
/ 16 августа 2011

Обычно называется сводным запросом.

select p.name, p.partnum, p.sku,
       max( case when s.name='WEIGHT' then s.value else null end ) weight,
       max( case when s.name='HEIGHT' then s.value else null end ) height,
       max( case when s.name='COLOR'  then s.value else null end ) color
from product p join product_spec s on p.id = s.p_id
where sku <= 1003
group by p.name, p.partnum, p.sku
...