SELECT łączący kilka wierszy w jeden

SELECT łączący kilka wierszy w jeden
aksimoN
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 88
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 :(

YA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2385
0

Da się, nazywa się to PIVOT.

Kopiuj
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]
;
PA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3892
1

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

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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.