1

Temat: Grupowanie różnych danych w powtarzajacych się wierszach

Witam, to jest mój pierwszy, ale na pewno nie ostatni post na tym forum. Mam pewien problem i nie wiem do końca jak sobie z nim poradzić, otóż mam takie zapytanie:

SELECT 
  pacjenci.nr_ksiegi_glownej AS "Nr księgi głównej", 
  pacjenci.pesel, 
  pacjenci.data_urodzenia, 
  pacjenci.nazwisko, 
  pacjenci.imie, 
  icd10.kod
  FROM 
  public.pacjenci, 
  public.icd10, 
  public.przyjecia, 
  diagnozy
WHERE 
  przyjecia.id_pacjenta = pacjenci.id AND
  diagnozy.id_przyjecia = przyjecia.id AND
  diagnozy.id_icd10 = icd10.id
order by pacjenci.nr_ksiegi_glownej;

którego wynik prezentuje się w następujący sposób:

Nr księgi głównej |    pesel    | data_urodzenia |          nazwisko          |         imie         |  kod  
-------------------+-------------+----------------+----------------------------+----------------------+-------
 2011/000013       | *********** | 1945-07-16     | Ł*******                   | Longina              | D37.4
 2011/000013       |  *********** | 1945-07-16     | Ł*******                   | Longina              | E11
 2011/000013       |  *********** | 1945-07-16     | Ł*******                   | Longina              | F32.3
 2011/000013       |  *********** | 1945-07-16     | Ł*******                   | Longina              | J45
 2011/000013       |  *********** | 1945-07-16     | Ł*******                   | Longina              | I10

Jak widać dane we wszystkich kolumnach poza jedną są identyczne, chciałbym uzyskać coś takiego:


Nr księgi głównej |    pesel    | data_urodzenia |          nazwisko          |         imie         |  kod  
-------------------+-------------+----------------+----------------------------+----------------------+-------
2011/000013       | ********** | 1945-07-16     | Ł*******                  | Longina              | D37.4,  E11, F32.3, F32.3, J45, I10

Będę wdzięczny za pomoc.

2

Odp: Grupowanie różnych danych w powtarzajacych się wierszach

nie wiem która wersje postgry masz na wersji 8.4 można zrobić to tak (przykład tylko pokazuje zasadę - musisz podstawić tabele i nazwy pól) o ile pamiętam w wersji 9 istnieje nowa funkcja concat_ws, która grupuje ciągi ale nie mam tej wersji więc musisz sprawdzić sam

select l1,l2,array_to_string (array_agg (kod),',') as kody
from (
    select  1 as l1,1 as l2 ,'1' as kod union all
    select  1 as l1,1 as l2 ,'2' as kod union all
    select  1 as l1,2 as l2 ,'1' as kod
     ) as d
group by l1,l2

3

Odp: Grupowanie różnych danych w powtarzajacych się wierszach

Dzięki za odpowiedź, chodziło mi właśnie o to smile