Warunek zliczający ilość zamówień na podstawie daty

0

Witajcie,

Myślę, że mam łatwy case, bo ja trudnych rzeczy nie robię :) - jestem na początku swojej edukacji.
Mam taki prosty kod:

Select Odbiorca_Kod,Odbiorca,Odbiorca_Kanal,Odbiorca_Segment_Nowy_Kod,Data_Faktury, Count(distinct Zamowienie_Numer) as 'Ilość zamówień', cast(SUM(Ilosc) as decimal) as 'Tonaż'
from OLAP_Sprzedaz_View

where Data_Faktury between '2022-01-01'  AND CAST(GETDATE() AS DATE) and Ilosc>0 and Odbiorca not like 'PARAGON%'
Group by Odbiorca_Kod,Odbiorca,Odbiorca_Kanal,Odbiorca_Segment_Nowy_Kod
Order by 5 desc

Jak dodać warunek: jeżeli data zamówienia(Data_Faktury) jest z tego samego dnia dla różnych Zamowienie_Numer i dlatego samego Odbiora_Kod to żeby zliczał to jako 1 zamówienie.

4

Tak na przyszlosc: zobacz jak to fajnie mozna sformatować

SELECT Odbiorca_Kod,
       Odbiorca,
       Odbiorca_Kanal,
       Odbiorca_Segment_Nowy_Kod,
       Data_Faktury,
       COUNT(DISTINCT Zamowienie_Numer) AS 'Ilość zamówień',
       CAST(SUM(Ilosc) AS decimal)      AS 'Tonaż'
FROM OLAP_Sprzedaz_View
WHERE Data_Faktury BETWEEN '2022-01-01' AND CAST(GETDATE() AS DATE)
  AND Ilosc > 0
  AND Odbiorca NOT LIKE 'PARAGON%'
GROUP BY Odbiorca_Kod,
         Odbiorca,
         Odbiorca_Kanal,
         Odbiorca_Segment_Nowy_Kod
ORDER BY 5 DESC

Dodatkowo polecam, abys nie uzywal polskich nazw

4

A ja dodatkowo polecam, byś grupował po takich elementach, po jakich agregujesz. Brakuje ci Data_Faktury. MySQL jest głuoi i to przepuści. Co więcej - wykona. Ale jakie będą wyniki, to tylko on wie :)

0

No dobra, przyjmuje uwagi odnośnie formatowania, ale czy ktoś coś ma jakiś pomysł by w zapytaniu zawrzeć mój warunek? W excelu rozwiązałbym to chyba sumą iloczynów - tak to by rozwiązało temat, ale w SQLu nie mam pojęcia. Problem polega na tym, że zamówień może być wiele na jednej trasie (jednej dostawie). Mogę to połączyć przez jakieś 10 tabel i dotrzeć do tras, w ktrórych są te zamówienia, ale jest za dużo 'ale' po drodze;)

0

Jak dodać warunek: jeżeli data zamówienia(Data_Faktury) jest z tego samego dnia dla różnych Zamowienie_Numer i dlatego samego Odbiora_Kod to żeby zliczał to jako 1 zamówienie.

Ja tam nie wiem, ale na logikę skoro grupujesz po odbiorca_kod i dacie faktury to zamiast count, wpisz na sztywno 1, założyłem, że data faktury nie znalazła się w group by przez przypadek. Jeżeli tak nie jest to ja nie wiem co zwraca w takim przypadku mysql

0
Panczo napisał(a):

Jak dodać warunek: jeżeli data zamówienia(Data_Faktury) jest z tego samego dnia dla różnych Zamowienie_Numer i dlatego samego Odbiora_Kod to żeby zliczał to jako 1 zamówienie.

Ja tam nie wiem, ale na logikę skoro grupujesz po odbiorca_kod i dacie faktury to zamiast count, wpisz na sztywno 1, założyłem, że data faktury nie znalazła się w group by przez przypadek. Jeżeli tak nie jest to ja nie wiem co zwraca w takim przypadku mysql

Data faktury w selectie jest do usunięcia. Teraz pokazuje ilość różnych zamówień dla odbiorców realizowanych w zadanym okresie.
A zależy mi by pokazywał ilość różnych zamówień dla odbiorców realizowanych pod warunkiem, że data faktury dla tego samego odbiorcy nie jest z tego samego dnia.
Ogarnę sobie to w excelu bez robienia funkcji agregujących. Tak będzie łatwiej.

2
Panczo napisał(a):

Jak dodać warunek: jeżeli data zamówienia(Data_Faktury) jest z tego samego dnia dla różnych Zamowienie_Numer i dlatego samego Odbiora_Kod to żeby zliczał to jako 1 zamówienie.

Ja tam nie wiem, ale na logikę skoro grupujesz po odbiorca_kod i dacie faktury to zamiast count, wpisz na sztywno 1, założyłem, że data faktury nie znalazła się w group by przez przypadek. Jeżeli tak nie jest to ja nie wiem co zwraca w takim przypadku mysql

Thinkmore napisał(a):
Panczo napisał(a):

Jak dodać warunek: jeżeli data zamówienia(Data_Faktury) jest z tego samego dnia dla różnych Zamowienie_Numer i dlatego samego Odbiora_Kod to żeby zliczał to jako 1 zamówienie.

Ja tam nie wiem, ale na logikę skoro grupujesz po odbiorca_kod i dacie faktury to zamiast count, wpisz na sztywno 1, założyłem, że data faktury nie znalazła się w group by przez przypadek. Jeżeli tak nie jest to ja nie wiem co zwraca w takim przypadku mysql

Data faktury w selectie jest do usunięcia. Teraz pokazuje ilość różnych zamówień dla odbiorców realizowanych w zadanym okresie.
A zależy mi by pokazywał ilość różnych zamówień dla odbiorców realizowanych pod warunkiem, że data faktury dla tego samego odbiorcy nie jest z tego samego dnia.
Ogarnę sobie to w excelu bez robienia funkcji agregujących. Tak będzie łatwiej.

Skoro ma być zliczone zamówienia " data faktury dla tego samego odbiorcy nie jest z tego samego dnia", to wydaje mi się, że musisz policzyć ilość różnych dat faktury.
Czyli Count(DISTINCT Data_Faktury)

0

Dziękuję bardzo za podpowiedzi, wydaje mi się, że osiągnąłem to co chciałem, chociaż musiałem dodać jeszcze jeden aspekt w selecie dotyczący magazynu realizującego zamówienie, bo przecież może się zdarzyć sytuacja, że jednego dnia będą realizowane dwa zamówienia z różnych magazynów do tego samego odbiorcy. Wydaje mi się, że zapytania jest poprawne.

SELECT Odbiorca_Kod,
	   Odbiorca_Kanal,
	   Odbiorca_Segment_Nowy_Kod,
	   Count(distinct Data_Faktury) as 'Ilość Zamówień', 
	   cast(SUM(Ilosc) as decimal) as 'Tonaż',
	   Magazyn
FROM OLAP_Sprzedaz_View

WHERE Data_Faktury between '2022-01-01'  AND CAST(GETDATE() AS DATE) 
	  AND Ilosc>0 
	  AND Odbiorca not like 'PARAGON%' 
	  AND Odbiorca_Kod='105592'
GROUP BY Odbiorca_Kod,Odbiorca_Kanal,Odbiorca_Segment_Nowy_Kod, Magazyn
ORDER BY 5 desc

Dla 1 klienta pokazuje:
screenshot-20221222090756.png
jak wyrzucę z selecta magazyn (czyli sam distinct po dacie):
screenshot-20221222090950.png
Jest ok, wrzucę do Power Query i będzie ok.

1 użytkowników online, w tym zalogowanych: 0, gości: 1