1

Temat: Widok tabeli

Mam tabele rpsok o strukturze (nie podaję całych nazw tylko skróty):

id_rpsok INT
id_kat INT
id_pkat INT
id_kom INT
id_z INT

o przykładowych danych:

1 | 1 | 1 | 2 | 2
2 | 1 | 2 | 2 | 2
3 | 1 | 1 | 3 | 2
4 | 2 | 1 | 2 | 2
5 | 2 | 2 | 2 | 2
6 | 2 | 1 | 3 | 2
Potrzebuję stworzyć widok tabeli o następującej strukturze

id_rpsok INT
id_kat INT
id_pkat INT
id_kom CHAR
id_z INT

1 | 1 | 1 | *2*,*3* | 2
2 | 1 | 2 | *2* | 2
3 | 2 | 1 | *2*,*3* | 2
4 | 2 | 2 | *2* | 2

Dla warunku id_z=2 oraz tych samych id_pkat w danym id_kat, id_kom przyjmuje postać wszystkich id_kom rozdzielonymi przecinkami.

2

Odp: Widok tabeli

proponuję takie zapytanie powinno działać od wersji 9.0 postgresa (jeśli w widoku chcesz koniecznie mieć pole id_rpsok to dopisz na pierwszym miejscu min(id_rpsok) as rp_sok,

with rpsok (id_rpsok,id_kat,id_pkat,id_kom,id_z) as (
values
(1 , 1 , 1 , 2 , 2),
(2 , 1 , 2 , 2 , 2),
(3 , 1 , 1 , 3 , 2),
(4 , 2 , 1 , 2 , 2),
(5 , 2 , 2 , 2 , 2),
(6 , 2 , 1 , 3 , 2))
select id_kat,id_pkat,string_agg('*'||id_kom||'*',','::text) as id_kom,id_z from rpsok where id_z=2
group by id_kat,id_pkat,id_z
order by 1,2