Mamy dwie tabele
Table Parent
ID int
TotalAmount float
Table Children
ParentID int,
ChildID int,
PaymentValue float
Przyznaje, że głupotą jest przetrzymywanie wartości finansowej jako float, ale byłem młody i głupi (jedno z tych nadal jest prawdziwe).
Proces jest następujący
Z pliku excela są ładowane dane do tabeli #Children. Następnie jest robiona na rekordach suma
select ParentID, sum(PaymentValue) as PaymentValue from #Children
Wynik tego działania daje mi dokładnie taką samą wartość jak w excelu:
ParentID | PaymentValue |
---|---|
1000 | 36917.98 |
Następnie rozbudowuje to ww. zapytanie aby sprawdzić czy parent ma taki sam TotalAmount (co suma dzieci)
select c.ParentID, sum(c.PaymentValue) as PaymentValue, p.TotalAmount from #Children c
left join Parent p on c.ParentID = p.ID
group by c.ParentID, p.TotalAmount
I tutaj niestety dzieją się (dla mnie) jakieś dziwne rzeczy.
ParentID | PaymentValue | TotalAmount |
---|---|---|
100 | 36917.98000000001 | 36917.98 |
TotalAmount (z tabeli Parent) jest taki jak się spodziewam - 36917.98,
ale już sum(c.PaymentValue) zwraca 36917.98000000001.
Skąd te dziwne '000000001'.
Poradziłem sobie z tym problemem robią CAST wyniku sumy na decimala, ale nurtuje mnie pytanie, dlaczego podczas sumowania FLOAT bez joina jest jedna wartość a z joinem inna.
Z góry dziękuję za pomoc.
P.S. Jak dodaje tabelkę tutaj na formularzu to jak dodać aby miała więcej niż 2 kolumny?