Sumowanie w relacji jeden do wielu z wielu tabel

0

f800de2c9e.pngCześć. Załóżmy, że mam tabelę T1, która posiada relacje jeden do wielu z tabelami T2 i T3 . Chciałbym wypisać np. nazwę z T1, sumę liczb z T2, sumę liczb z T3. Oczywiście pogrupowane, że sumuje mi liczby dla odpowiedniej nazwy. Schemat tabel, dane w tabelach i interesujące mnie wyniki są poniżej.

Zrobiłem coś takiego:

SELECT T1.Nazwa,
(SELECT SUM(Liczba) FROM T2 WHERE T2.Id = T1.Id),
(SELECT SUM(Liczba) FROM T3 WHERE T3.Id = T1.Id)
FROM  T1

Jednak czy istnieje jakieś lepsze i wydajniejsze rozwiązanie? Próbowałem robić to z GROUP BY jednak wyniki miałem złe.

Tabele:
f1817033b6.png

Dane i wyniki:
65150654cb.png31457ca006.png

1
select
  t1.nazwa,
  sum(t2.liczba) liczba2,
  sum(t3.liczba) liczba3,
from
  t1
left join t2 on t2.id = t1.id2
left join t3 on t3.id = t1.id3
group by
  t1.nazwa
0

Niestety wyniki jakie mam dla tego zapytania to:

Test	 5       150
Test2	NULL	500
Test3	NULL	NULL
0
SELECT
  t1.nazwa,
  SUM(ISNULL(t2.liczba, 0)) liczba2,
  SUM(ISNULL(t3.liczba, 0)) liczba3,
FROM
  t1
LEFT JOIN t2 ON t2.id = t1.id2
LEFT JOIN t3 ON t3.id = t1.id3
GROUP BY
  t1.nazwa
0

Teraz jest:

Test	 25	  250
Test2	30	  800
Test3	NULL	NULL

W ogóle T1.Id2 i T1.Id3 nie jest przypadkiem pomyłką?

0
  1. obrazki wrzucaj do postu a nie jako spakowany załącznik!
  2. masz kijowo (żeby nie napisać dosadniej) nazwane kolumny. Id to ma być PK a nie FK!
  3. wg Twojego schematu to będzie
SELECT
  t1.nazwa,
  SUM(ISNULL(t2.liczba, 0)) liczba2,
  SUM(ISNULL(t3.liczba, 0)) liczba3,
FROM
  t1
LEFT JOIN t2 ON t2.id = t1.id
LEFT JOIN t3 ON t3.id = t1.id
GROUP BY
  t1.nazwa
0
  1. Poprawione
  2. Nazwy takie bo pisałem to tylko do testu
  3. Teraz wyniki są takie:
Test	 90    750
Test2	60	1600
Test3	0	 0

Jeśli zrobimy tak:

SELECT T1.Nazwa,
SUM(DISTINCT T2.Liczba),
SUM(DISTINCT T3.Liczba)
FROM T1
LEFT JOIN T2 ON T2.Id=T1.Id
LEFT JOIN T3 ON T3.Id=T1.Id
GROUP BY
T1.Nazwa

To wtedy zwraca poprawne wyniki, ale tylko jeśli w tabeli nie istnieją dwa takie same wpisy.

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