Witam,
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