Mam bazę o strukturze:
Grupowanie:
IdentyfikatorRekordu | int(11) NrFaktury | varchar(12) Grupa | varchar(100) Ilosc | double Wartosc | double
Faktury:
IdentyfikatorRekordu | int(11) KodKontrahenta | int(11) NazwaKontrahenta | varchar(150) NrFaktury | varchar(12) Data | date IndexTowaru | int(11) NazwaTowaru | varchar(150) Grupa | varchar(100) Ilosc | int(11) CenaNetto | double Wartosc | double CenaBaza | double PM | varchar(100) Producent | varchar(100) Ciag | varchar(2) Rabat | double Przekroczenie | double Obciazenie | double
Firmy:
IdentyfikatorRekordu | int(11) KodKontrahenta | int(11) Grupa | varchar(100) Producent | varchar(100) Rabat | double
Rabaty:
IdentyfikatorRekordu | int(11) Grupa | varchar(100) Producent | varchar(100) PoIlosci | tinyint(1) WartoscMinimalna | int(11) WartoscMaksymalna | int(11) Rabat | double
Wysyłam do niej zapytanie:
SELECT KodKontrahenta AS Kod, NrFaktury, Grupa, Producent, CenaNetto AS Netto, CenaBaza AS Baza, Ilosc, (SELECT sum(Ilosc) FROM Grupowanie GROUP BY NrFaktury, Grupa HAVING Grupowanie.NrFaktury=Faktury.NrFaktury AND Grupowanie.Grupa=Faktury.Grupa) AS Ile, (SELECT sum(Wartosc) FROM Grupowanie GROUP BY NrFaktury, Grupa HAVING Grupowanie.NrFaktury=Faktury.NrFaktury AND Grupowanie.Grupa=Faktury.Grupa) AS ZaIle, IFNULL( (SELECT DISTINCT Rabat FROM Firmy WHERE KodKontrahenta=Kod AND Grupa=Firmy.Grupa AND (Producent=Faktury.Producent OR Producent="NULL") ), (SELECT Rabat FROM Rabaty WHERE WartoscMinimalna<=(SELECT DISTINCT IF(PoIlosci=1, Ile, ZaIle) FROM Rabaty WHERE Grupa=Faktury.Grupa) AND WartoscMaksymalna>=(SELECT DISTINCT IF(PoIlosci=1, Ile, ZaIle) FROM Rabaty WHERE Grupa=Faktury.Grupa) AND Grupa=Faktury.Grupa AND (Producent=Faktury.Producent OR Producent="NULL") ) ) AS RabatMax, IF( ROUND( ((SELECT Baza-(((SELECT IFNULL(RabatMax,0))*(SELECT Baza))/100 ))), 2)> (SELECT Netto),ROUND( (( ROUND( ((SELECT Baza-(((SELECT IFNULL(RabatMax,0))*(SELECT Baza))/100 ))), 2)- (SELECT Netto) ))*(SELECT Ilosc),2), 0) AS Przekroczenie, (SELECT Przekroczenie) AS Obciazenie, ROUND(100-(((SELECT Netto)*100)/(SELECT Baza)),2) AS Rabat FROM Faktury
Wszystko jest zwracane tak jak chcę, poza "Obciazenie", tam powinna być zwrócona ta sama wartość co w :Przekroczenie", bo później chciałem dokonać na niej operacji. Niestety zwracane są mi jakieś cuda. Nie mogę się doszukać logicznego powiązania zwracanej wartości.
np. gdy Przekroczenie jest 20 to Obciazenie 3.23
kiedy Przekroczenie 6 Obciazenie 4.97
Nie bardzo rozumiem dlaczego. Tym bardziej, że kiedy we wcześniejszej części zapytania odwołuję się tak do któregoś pola wszystko działa dobrze.
Nie chcę przepisywać w to miejsce tego kodu co wyżej ponieważ przedłuży czas wykonywania zapytania przez bazę.
Ktoś ma pomysł co zrobić żeby podzapytanie zwracało odpowiednią wartość?
Pozdrawiam