zapytanie sql wyszukanie nr faktur

0

Witam! zaczynam przygodę z SQL muszę z bazy wyciągnąć dane a mianowicie:

Dla podanych zleceń (tutaj nr zleceń) trzeba wybrać materiały, których cena jednostkowa jest większa lub równa 1000 zl
do tych materiałów, pozycji należy znaleźć numery faktur, z których pochodzą te materiały.

nazwy tabel w bazie:
TOW_DAT - tabela pozycji na dokumentach magazynowych (czyli poszczególne materiały)
ROZCH_DAT - tabela rozchodów, zawiera informację ile jednostek materiału został wydanych z danej dostawy
DOST_DAT - tabela dostaw, zawiera informacje ile jednostek materiału zostało dostarczonych z danej dostawy
DOK_DAT - tabela nagłówków dokumentów magazynowych, zawiera takie inf jak typ symbol dokumentu (RW, PW, PZ itd.), numer dokumentu magazynowego, datę, nr faktury

W załączeniu powiązania między tabelami oraz pola tabel

screenshot-20240318112448.png

Z góry dzięki za podpoiwiedzi!

0

Wrzuć co już zrobiłeś sam i co tam nie działa że prosisz o pomoc.

0

„Niech ktoś za mnie zrobi, bo mi się nie chce”, wrzuciłbyś w gpt i byś dostał pomoc z Basic SQLa

0

Cos takiego mam.
Wyświetla błąd dzielenia przez zero ale to już kwestia brania dokumentów z bazy.

SELECT
  TOW_DAT.G_NRZLEC AS NumerZlecenia,
  TOW_DAT.G_INDEKS AS IndeksMaterialu,
  DOK_DAT.G_SYMDOK AS NRfaktury,
  DOK_DAT.G_NRZEWN AS NumerFaktury,
  TOW_DAT.G_WARWYD AS WartoscWydana,
  TOW_DAT.G_ILWYD AS IloscWydana,
  TOW_DAT.G_STATUS AS Status
FROM
  TOW_DAT
JOIN
  Rozch_DAT ON TOW_DAT.G_NRSYS = ROZCH_DAT.G_NRSYS
  and Rozch_DAT.G_POZD = ROZCH_DAT.G_POZ
JOIN
  DOST_DAT ON ROZCH_DAT.G_NRDOST = DOST_DAT.G_NRDOST
  and Rozch_DAT.G_POZD = dost_DAT.G_POZ
JOIN
  DOK_DAT ON DOK_DAT.G_NRSYS = DOK_DAT.G_NRSYS
WHERE
  (TOW_DAT.G_TYPZLEC+TOW_DAT.G_NRZLEC = '1111'
    or TOW_DAT.G_TYPZLEC+TOW_DAT.G_NRZLEC = '2222'
    or TOW_DAT.G_TYPZLEC+TOW_DAT.G_NRZLEC = '3333')
    AND (TOW_DAT.G_WARWYD / TOW_DAT.G_ILWYD) >= 1000
    AND TOW_DAT.G_STATUS = 'I'
    AND (TOW_DAT._DELETED IS NULL OR TOW_DAT._DELETED <> '*')
0

Więc musisz zabezpieczyć się przed dzieleniem przez zero np tak:

AND (TOW_DAT.G_WARWYD / NULLIF(TOW_DAT.G_ILWYD,0)) >= 1000

Powyżej wykorzystałem funkcję NULLIF - która zamieni Ci 0 na wartość null.

2

mozesz dla czytelności użyć in

WHERE
  TOW_DAT.G_TYPZLEC+TOW_DAT.G_NRZLEC in ('1111', '2222', '3333')
    AND TOW_DAT.G_WARWYD / NULLIF(TOW_DAT.G_ILWYD,0)) >= 1000
    AND TOW_DAT.G_STATUS = 'I'
    AND (TOW_DAT._DELETED IS NULL OR TOW_DAT._DELETED <> '*')
0

rozwiązano problem proszę o usunięcie posta

1

Znalazłeś czas na napisanie posta z prośba o usuniecie, a nie znalazles czasu by zaznaczyć posta z odpowiedzią. Nie rozumiem. Dlaczego post ma być usunięty?

0
dzak napisał(a):

rozwiązano problem proszę o usunięcie posta

jeżeli napisałem już w między czasie zapytanie to chyba logiczne, że można usunąć post

1

Dla ścisłości @BlackBad rozwiazał Twój problem i to jego post powinieneś oznaczyć jak odpowiedź.
Nie, nie jest logiczne usuwanie wątków z rozwiązaniami, bo wtedy inni nie mogą korzystać z wiedzy nim zawartej.

0

Popieram to, co napisał @Panczo - ideą forum jest nie tylko bieżące pomaganie osobie pytającej, ale także pozostawienie śladu, żeby w przyszłości osoby przeglądające dany watek (albo szukające pomocy w podobnym temacie) mogły z tego skorzystać. Także samo stwierdzenie "problem rozwiązany, wątek kasujemy" nie jest w mojej ocenie wystarczającym powodem do usuwania treści. Tym bardziej, że w zamieszczonym kodzie nie ma niczego osobistego, żadnych wrażliwych danych ani niczego, co nie powinno być dostępne w necie.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.