SELECT łączący kilka wierszy w jeden

0

Mam tabelę która dla tego samego ID ma od jednego do 3 wpisów które różnią się w polu KOD

SELECT [ID],[LICZBA_DNI] as A FROM [TABLE] WHERE KOD='A'
SELECT [ID],[LICZBA_DNI] as B FROM [TABLE] WHERE KOD='B'
SELECT [ID],[LICZBA_DNI] as C FROM [TABLE] WHERE KOD='C'

Potrzebuję połączyć takie wiersze w jedno w taki sposób:

źródło:
ID | LICZBA_DNI | KOD
1 | 3 | A
2 | 3 | A

1 | 5 | B

2 | 4 | C

wynik:
ID | DNI A | DNI B | DNI C
1 | 3 | 5 | 0
2 | 3 | 0 | 4

Da się to jakoś ogarnąć bo mam już pustkę w głowie. Próbowałem jakimś joinem ale też mi nie szło :(

0

Da się, nazywa się to PIVOT.

select
  [ID],
  max(case when [KOD]='A' then [LICZBA_DNI] else null end) Dni_A,
  max(case when [KOD]='B' then [LICZBA_DNI] else null end) Dni_B,
  max(case when [KOD]='C' then [LICZBA_DNI] else null end) Dni_C
from [TABLE] where [KOD] in ('A','B','C')
group by [ID]
order by [ID]
;
1

@yarel: jak piszesz o pivocie to uzyjmy skladni pivot:

SELECT id, a,b,c
FROM
(
  SELECT id
   FROM tabela
) AS j
PIVOT
(
  SUM(liczba_dni) FOR Name IN ([A],[B],[C])
) AS p;

1 użytkowników online, w tym zalogowanych: 0, gości: 1