Autor Wątek: zestawienie SQL - sprzedaż wg kontrahentów towary z flagą  (Przeczytany 4737 razy)

0 użytkowników i 1 Gość przegląda ten wątek.

Offline noob01

  • Nowy użytkownik
  • *
  • Wiadomości: 2
  • Reputacja +0/-0
  • Wersja programu: Subiekt GT 1.39
zestawienie SQL - sprzedaż wg kontrahentów towary z flagą
« dnia: Wrzesień 24, 2015, 15:57:16 »
Witam,
Chcę przerobić jedno z wbudowanych zestawień (Sprzedaż wg kontrahentów i asortymentu) tak by wyliczał mi to zestawienie tylko dla towarów z określoną flagą.
I drugie pytanko: jak zastąpić te zmienne @DataDo, bo tego jak jest to subiekt nie przyjmie jako zestawienie własne SQL.

Profilerem wydłubałem coś takiego:

DECLARE @dataDo DATETIME
SET @DataDo = '20150924'
SELECT
adr_Nazwa = CASE
WHEN GROUPING(adr_Nazwa) = 1
THEN '(Razem sprzeda¿)'
ELSE ISNULL(adr_Nazwa, '(Kontrahent nieokreœlony)')
END,
grt_Nazwa = CASE
WHEN GROUPING(adr_Nazwa) = 1 THEN ''
WHEN GROUPING(adr_Nazwa) = 0 AND GROUPING(grt_Nazwa) = 1
THEN '(Razem kontrahent)'
ELSE ISNULL(grt_Nazwa, '(Grupa nieokreœlona)')
END,
tw_Nazwa = CASE
WHEN GROUPING(grt_Nazwa) =  1 THEN ''
WHEN GROUPING(grt_Nazwa) = 0 AND GROUPING(tw_Symbol) = 1
THEN '(Razem grupa)'
ELSE CASE
WHEN MAX(tw_Nazwa) IS NULL AND GROUPING(tw_Symbol)=0
THEN '(Us³uga jednorazowa)' ELSE MAX(tw_Nazwa)
END
END,
tw_Symbol = CASE
WHEN GROUPING(grt_Nazwa) =  1 THEN ''
WHEN GROUPING(grt_Nazwa) = 0 AND GROUPING(tw_Symbol) = 1
THEN '(Razem grupa)' WHEN tw_Symbol = ''
THEN '(Brak symbolu towaru)'
ELSE CASE
WHEN tw_Symbol IS NULL AND GROUPING(tw_Symbol)=0
THEN '(Us³uga jednorazowa)'
ELSE tw_Symbol
END
END,
SUM(ob_IloscMag * ob_Znak) as ob_IloscMag,  tw_JednMiary = CASE
WHEN GROUPING(grt_Nazwa) =  1 THEN ''
WHEN GROUPING(grt_Nazwa) = 0 AND GROUPING(tw_Symbol) = 1 THEN ''
ELSE  MAX(tw_JednMiary)
END,
SUM(ob_WartBrutto * ob_Znak) as ob_WartBrutto,
SUM(ob_WartNetto * ob_Znak) as ob_WartNetto,
SUM(CASE WHEN (ob_TowRodzaj&6)>0 THEN 0 ELSE dbo.fnZestSub_KosztSpr(@DataDo, ob_Id)*ob_Znak END) as ob_WartMag,
SUM((ob_WartNetto-CASE WHEN (ob_TowRodzaj&6)>0 THEN 0 ELSE dbo.fnZestSub_KosztSpr(@DataDo, ob_Id) END) * ob_Znak) as Zysk, Marza = CONVERT(MONEY, CASE WHEN SUM(ob_WartNetto * ob_Znak)<>0 THEN (SUM((ob_WartNetto-CASE WHEN (ob_TowRodzaj&6)>0 THEN 0.0000 ELSE dbo.fnZestSub_KosztSpr(@DataDo, ob_Id) END) * ob_Znak)/SUM(ob_WartNetto * ob_Znak))*100 ELSE 0.0000 END )
FROM
vwZstSprzWgKhnt
LEFT JOIN tw__Towar ON ob_TowId = tw_Id
LEFT JOIN sl_GrupaTw ON tw_IdGrupa = grt_Id
LEFT JOIN kh__Kontrahent ON dok_PlatnikId = kh_Id
LEFT JOIN adr_Historia ON dok_PlatnikAdreshId = adrh_Id
LEFT JOIN adr__Ewid ON adrh_IdAdresu = adr_Id

WHERE
((adr_TypAdresu = 1) OR (dok_PlatnikAdreshId IS NULL)) 
AND (( (dok_DataWyst>='20150901') AND (dok_DataWyst<='20150924') )
AND (TypDlugi IN (131072, 131074, 131075, 131076, 131077, 262144, 393216, 393217, 393218, 1376256, 1376257, 1376258, 1376259, 917504, 917505, 4063232, 4390912, 4390913))
AND (tw_Id IN (709,1269))
AND (dok_MagId IN (4, 1, 2, 3)))
AND  ob_TowRodzaj & 15 > 0 

GROUP BY adr_Nazwa, grt_Nazwa, tw_Symbol WITH ROLLUP
go

warunek: AND (( (dok_DataWyst>='20150901') AND (dok_DataWyst<='20150924') )  wiem, że mogę zastąpić
dok_DataWyst BETWEEN {DR:Data dokumentu:SELECT GETDATE():SELECT GETDATE()} Natomiast zmienna @DataDo jest wykorzystana jeszcze wcześniej w kodzie i nie wiem jak ją zastąpić, żeby była brana automatycznie z tego drugiego GETDATE().
A może da się to jakoś uprościć? bo zawsze będę chciał wyciągnąć zestawienie z pełnego miesiąca.


Offline dkozlowski

  • Ekspert
  • *****
  • Wiadomości: 17064
  • Reputacja +798/-27
  • Wersja programu: GT/Navireo/nexo
Odp: zestawienie SQL - sprzedaż wg kontrahentów towary z flagą
« Odpowiedź #1 dnia: Wrzesień 24, 2015, 16:46:14 »
Temat poruszany kilka razy na forum... Należy skorzystać z kontrolek "D".
Daniel, Białystok.

Offline noob01

  • Nowy użytkownik
  • *
  • Wiadomości: 2
  • Reputacja +0/-0
  • Wersja programu: Subiekt GT 1.39
Odp: zestawienie SQL - sprzedaż wg kontrahentów towary z flagą
« Odpowiedź #2 dnia: Wrzesień 25, 2015, 08:34:42 »
Dzięki za kontrolki.
A jakaś wskazówka w pytaniu zasadniczym? tj. jak przerobić zamówienie by zestawienie sprzedaży generowało się tylko dla towarów z określoną flagą?

Offline dkozlowski

  • Ekspert
  • *****
  • Wiadomości: 17064
  • Reputacja +798/-27
  • Wersja programu: GT/Navireo/nexo
Odp: zestawienie SQL - sprzedaż wg kontrahentów towary z flagą
« Odpowiedź #3 dnia: Wrzesień 25, 2015, 08:55:26 »
A jakaś wskazówka w pytaniu zasadniczym? tj. jak przerobić zamówienie by zestawienie sprzedaży generowało się tylko dla towarów z określoną flagą?

W takim razie nie rozumiem pytania... Dla mnie temat jest oczywisty, sprawdzasz jak program zapisuje informacje o flagach, dodajesz warunki do zapytania i zrobione. Jak to sprawdzić było wielokrotnie opisywane w tym dziale - dokumentacja bazy danych, profiler... Jeśli nie radzisz sobie z takimi rzeczami to być może musisz poświecić więcej czasu na pozyskanie wiedzy niezbędnej do tworzenia takich zestawień lub zlecić to komuś innemu.
Daniel, Białystok.

Forum Użytkownikow Subiekt GT

Odp: zestawienie SQL - sprzedaż wg kontrahentów towary z flagą
« Odpowiedź #3 dnia: Wrzesień 25, 2015, 08:55:26 »