Wpis z mikrobloga

#sql #oracle
Mam problem z jednym widokiem
https://pastebin.com/seLsg7tt
Nie zwraca mi poprawnej liczby, przy niewielkiej ilości faktur jest dobrze, przy np. 1000 jest różnica o 1%, przy 20k już ponad 10%.
Fakturadetale ma klucz złożony, gdzie pod idfaktury mam różną liczbę pozycji.
  • 7
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@MatexN: nie napisałeś co chcesz osiągnąć i w którym miejscu jest 10% rozbieżności, ale zgaduję, że na kolumnie:
SUM(DISTINCT FAKTURANAGLOWEK.WARTOSCFAKTURY) AS "Maksymalna kwota zakupów"

Strzelam, że tu, bo opis nie przystaje do sqla. To nie jest ani max zakupów, ani suma (bo co jeśli dwie faktury są na tę samą kwotę).
  • Odpowiedz
@Dionizja: Zły opis dałem, chodzi mi o sumę.
Jeśli mam wygenerowaną jedną fakturę na 100zł, która ma 5 pozycji, to w widoku pokaże mi się 500zł.
Z użyciem distinct kwota w widoku będzie nadal zawsze większa od tej co mam łącznie w fakturach. Im więcej faktur tym kwota będzie się bardziej różnić.
@aardwolf: 1. W przypadku grup by id_klienta, wywala mi błąd ora-00979 to nie jest wyrażenie group
  • Odpowiedz
@MatexN: od złej strony się za to zabierasz. Spróbuj tak: tabele faktura detale pogrupuj po id faktury i zsumuj co potrzebujesz. Nastepnie użyj tego jako podzapytania i dojoinuj informacje o fakturze i kliencie.

W przypadku grup by idklienta, wywala mi błąd ora-00979 to nie jest wyrażenie group by


A dodajesz idklienta w select?
  • Odpowiedz
@Dionizja: Tak daje, jednak wtedy i tak muszę group by dać po 3 kolumnach.
select a.idklienta, sum(b.wartoscfaktury) from Klient a, Fakturanaglowek b where a.idklienta = b.idklienta group by a.idklienta;
To mi zwraca dobre wyniki.
  • Odpowiedz
@Dionizja: Tzn mam w bazie tam 8 czy 10 klientów i dla nich generuje np. 10 tysięcy faktur ( ͡° ͜ʖ ͡°)
Obecnie dla 5k faktur zwraca dobre wyniki, dam celowo 2 na tą samą kwotę by zobaczyć jak to będzie się zachowywało i spróbuje z tym podzapytaniem chociaż nigdy tak nie pisałem ( ͡° ʖ̯ ͡°)
  • Odpowiedz