Witam,

Mam bazę o strukturze:

Grupowanie:
  1. IdentyfikatorRekordu | int(11)
  2.  
  3. NrFaktury | varchar(12)
  4.  
  5. Grupa | varchar(100)
  6.  
  7. Ilosc | double
  8.  
  9. Wartosc | double

Faktury:

  1. IdentyfikatorRekordu | int(11)
  2.  
  3. KodKontrahenta | int(11)
  4.  
  5. NazwaKontrahenta | varchar(150)
  6.  
  7. NrFaktury | varchar(12)
  8.  
  9. Data | date
  10.  
  11. IndexTowaru | int(11)
  12.  
  13. NazwaTowaru | varchar(150)
  14.  
  15. Grupa | varchar(100)
  16.  
  17. Ilosc | int(11)
  18.  
  19. CenaNetto | double
  20.  
  21. Wartosc | double
  22.  
  23. CenaBaza | double
  24.  
  25. PM | varchar(100)
  26.  
  27. Producent | varchar(100)
  28.  
  29. Ciag | varchar(2)
  30.  
  31. Rabat | double
  32.  
  33. Przekroczenie | double
  34.  
  35. Obciazenie | double

Firmy:
  1. IdentyfikatorRekordu | int(11)
  2.  
  3. KodKontrahenta | int(11)
  4.  
  5. Grupa | varchar(100)
  6.  
  7. Producent | varchar(100)
  8.  
  9. Rabat | double

Rabaty:
  1. IdentyfikatorRekordu | int(11)
  2.  
  3. Grupa | varchar(100)
  4.  
  5. Producent | varchar(100)
  6.  
  7. PoIlosci | tinyint(1)
  8.  
  9. WartoscMinimalna | int(11)
  10.  
  11. WartoscMaksymalna | int(11)
  12.  
  13. Rabat | double


Wysyłam do niej zapytanie:

  1. SELECT KodKontrahenta AS Kod, NrFaktury, Grupa, Producent, CenaNetto AS Netto, CenaBaza AS Baza, Ilosc,
  2. (SELECT sum(Ilosc) FROM Grupowanie GROUP BY NrFaktury, Grupa HAVING Grupowanie.NrFaktury=Faktury.NrFaktury AND Grupowanie.Grupa=Faktury.Grupa) AS Ile,
  3. (SELECT sum(Wartosc) FROM Grupowanie GROUP BY NrFaktury, Grupa HAVING Grupowanie.NrFaktury=Faktury.NrFaktury AND Grupowanie.Grupa=Faktury.Grupa) AS ZaIle,
  4. 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,
  5. 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,
  6. (SELECT Przekroczenie) AS Obciazenie,
  7. ROUND(100-(((SELECT Netto)*100)/(SELECT Baza)),2) AS Rabat
  8. 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