2013-11-11 3 views
0

После попытки с с рекурсией У меня есть вопросPostgresql с рекурсивным запросом

Я пытаюсь с двумя столовыми

первая таблица complain_table

complain     product_id 
---------------------------------------- 
Not working   -   1 
not working      1 
not working      1 
Loading problem     2 
Loading problem     2 

второй стол product_table

Name  id      
-------------- 
usb  1 
cd  2 

Теперь мой желаемый результат:

product    complain 
----------------------------------- 
usb     Not working 
         Not working 
         Not working 
cd     Loading problem 
         Loading problem 
+0

Что вы уже пробовали? Версия PostgreSQL? Как это отличается от http://stackoverflow.com/q/19872751/398670? Вы следовали рекомендациям, данным там? ** Отформатируйте свои вопросы **. Это не требует рекурсии вообще, это должно быть просто «GROUP BY» и некоторая «string_agg». –

+0

выберите p.product из ((с КТР (продукт, сорт, sort2, ид) в качестве ( выберите отчетливый pp.name, pp.name, 0, COUNT (pp.name) из product_complaints шт покинул присоединиться product_product С. на pp.id = pc.complaints_id группы по pp.name, pc.complaints_id объединение всех выберите '' || pc.name, pp.name, 1, pc.product_id из product_complaints ПК покинул присоединиться product_product pp на pp.id = pc.complaints_id группа по pp.name, pc.product_id, pc.name )) выбрать продукт, сортировать, sort2, id от cte group by product, sort, sort2, id заказать по сортировке, sort2, id)) as p –

+2

Пожалуйста, не публикуйте комментарии в комментариях, а затем редактируйте свой вопрос. –

ответ

1

Если вы хотите выход, как показано на рисунке (подавляя повторяющиеся названия продуктов), следующие должны это сделать:

select case 
     when row_number() over (partition by p.name order by ct.complain) = 1 then p.name 
     else null 
     end as product, 
     ct.complain 
from products p 
    join complain_table ct on p.product_id = ct.product_id 
order by p.product_id; 

Btw: ваш complain_table выглядит, как он должен иметь complain_reason_id реферирование a complain_reason_text таблица, чтобы повторять один и тот же текст жалобы снова и снова

Смежные вопросы