MS SQL - Zliczanie rekordów jeśli usługa występuje chociaż raz

0

Witam potrzebuję pomocy z jednym zapytaniem MS SQL 2012

mam 2 tabele

  1. [WAPRO].[dbo].[nex_wyp_SerZlecenia] - ogólne dane zlecenia - (zl_id, zl_dataZamkniecia)
  2. [WAPRO].[dbo].[nex_wyp_SerZleceniaPozycje] - szczególowe dane, gdzie kazdy rerekord to usługa lub towar w zleceniu (zlp_zlid, zlp_Nazwa, zlp_Ilosc, zlp_Cena )

potrzebuje zliczyć ilość zleceń w którym CHOCIAŻ RAZ wystąpiła jedna z usług ('wymiana opon', ', 'wymiana opony z wyważeniem', 'wyważenie kół', 'wymiana opon w myciem' )
jeśli usługi w zleceniu się dublują lub występuje kilka usług lub usługi z listy występują 2x po 2 z w/w listy to zlecenie może być policzone tylko raz. Wszystko w obrębie danego miesiąca

poniższe zapytanie działa tylko jak jest 1 usługa, ale jak występuje kilka usług, lub usługa z dublowana to źle liczy, pomóżcie proszę

SELECT COUNT(zl_id) AS ILOŚĆ, [zlp_Nazwa] AS [NAZWA USŁUGI]
FROM [WAPRO].[dbo].[nex_wyp_SerZlecenia] inner join [WAPRO].[dbo].[nex_wyp_SerZleceniaPozycje] ON zl_id = zlp_zlid
WHERE
[zlp_Nazwa] like 'wymiana opon' AND
[zlp_Nazwa] like 'wymiana opony z wyważeniem' AND
[zlp_Nazwa] like 'wyważenie kół' AND
[zlp_Nazwa] like 'wymiana opon w myciem' AND
(DATEPART(yy, zl_dataZamkniecia) = 2017 and DATEPART(mm, zl_dataZamkniecia) =10)
GROUP BY [zlp_Nazwa]

1
SELECT COUNT(DISTINCT zlp_Nazwa) AS ILOŚĆ, zl_id
FROM [WAPRO].[dbo].[nex_wyp_SerZlecenia] inner join [WAPRO].[dbo].[nex_wyp_SerZleceniaPozycje] ON zl_id = zlp_zlid
WHERE
[zlp_Nazwa] IN ( 'wymiana opon','wymiana opony z wyważeniem','wyważenie kół', 'wymiana opon w myciem')
(DATEPART(yy, zl_dataZamkniecia) = 2017 and DATEPART(mm, zl_dataZamkniecia) =10)
GROUP BY zl_id
0

Dziękuję za opowiedz, trochę inny wynik niż chciałem, ale po małej modyfikacji działa poprawnie dziękuję.

SELECT COUNT(DISTINCT zl_id) AS ILOŚĆ
FROM [WAPRO].[dbo].[nex_wyp_SerZlecenia] INNER JOIN [WAPRO].[dbo].[nex_wyp_SerZleceniaPozycje] ON zl_id = zlp_zlid
WHERE
[zlp_Nazwa] IN ( 'wymiana opon','wymiana opony z wyważeniem','wyważenie kół', 'wymiana opon w myciem') AND
(DATEPART(yy, zl_dataZamkniecia) = 2017 AND DATEPART(mm, zl_dataZamkniecia) =10)
GROUP BY zlp_Nazwa /* ewentualnie jeszcze group by mozna wstawić ale z [zlp_Nazwa] */

0

nawet nie widziałem, co to robi :) już zmieniam i jeszcze raz dziękuję i i proszę o wybaczenie na przyszłość.

kaiks napisał(a):

Dziękuję za opowiedz, trochę inny wynik niż chciałem, ale po małej modyfikacji działa poprawnie dziękuję.

SELECT COUNT(DISTINCT zl_id) AS ILOŚĆ
FROM [WAPRO].[dbo].[nex_wyp_SerZlecenia] INNER JOIN [WAPRO].[dbo].[nex_wyp_SerZleceniaPozycje] ON zl_id = zlp_zlid
WHERE
[zlp_Nazwa] IN ( 'wymiana opon','wymiana opony z wyważeniem','wyważenie kół', 'wymiana opon w myciem') AND
(DATEPART(yy, zl_dataZamkniecia) = 2017 AND DATEPART(mm, zl_dataZamkniecia) =10)
GROUP BY zlp_Nazwa /* ewentualnie jeszcze group by mozna wstawić ale z [zlp_Nazwa] */

0

Spoko - fajnie, że zareagowałeś i szybko poprawiłeś ;) (Y)

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