Forum Użytkownikow Subiekt GT

InsERT GT => Dodatki - zestawienia - sfera => Wątek zaczęty przez: Yasi_00 w Październik 01, 2015, 09:31:00

Tytuł: ZAPYTANIE OBRÓT WG MAGAZYNÓW +"CASE"
Wiadomość wysłana przez: Yasi_00 w Październik 01, 2015, 09:31:00
SELECT CONVERT(VARCHAR, dok_MagId) as id_Magazynu,    SUM(ob_IloscMag * ob_Znak) as ob_IloscMag,
CASE WHEN id_Magazynu = 6 THEN SUM(ob_WartBrutto * ob_Znak)-7000 as obrót_7000,
ELSE {SUM(ob_WartBrutto * ob_Znak)-5000 as obrót_5000, }
END

CONVERT(MONEY, 0) as marza FROM vwZstSprzWgKhnt
WHERE dok_Status <> 2 
AND ( (dok_DataWyst BETWEEN  {DR:Data:}  )
AND (dbo.fnMAKE_DOKPARAM(dok_Typ, dok_Podtyp)
IN (131072,131075, 131077,131074,4063232,262144,393216,393217,1376256,1376258,1376257,1376259,917504,917505))

AND (dok_MagId>3))

GROUP BY dok_MagId

jakiś czas temu dzięki waszej uprzejmości pomocy uzyskałem bardzo dobry kod, postanowiłem do nieco zmodyfikować, i dodać if-a niestety pokazuje mi się błąd w składni,
czy mogę prosić o podpowiedź?
Tytuł: Odp: ZAPYTANIE OBRÓT WG MAGAZYNÓW +"CASE"
Wiadomość wysłana przez: dkozlowski w Październik 01, 2015, 09:46:33
Wygląda na to, że zgadujesz, a tak się nie da... Należy co najmniej zajrzeć do dokumentacji (https://technet.microsoft.com/pl-pl/library/ms181765(v=sql.110).aspx (https://technet.microsoft.com/pl-pl/library/ms181765(v=sql.110).aspx)) i zastosować się do składni... Alias można nadać dla kolumny, nie robi się tego dla wyrażeń dla spełnionego i nie spełnionego warunku. Nie wiem też skąd wzięły się przecinki po wyrażeniach z CASE'a, nie ma za to przecinka po kolumnie która jest zwracana przez warunek. No i co to niby jest "id_Magazynu" ?
Tytuł: Odp: ZAPYTANIE OBRÓT WG MAGAZYNÓW +"CASE"
Wiadomość wysłana przez: Yasi_00 w Październik 02, 2015, 09:51:27
faktycznie trochę zgadywałem,
dzięki za podpowiedź :) jak zwykle bardzo rzeczowo,
gotowiec poniżej gdyby ktoś potrzebował

SELECT CONVERT(VARCHAR, dok_MagId) as id_Magazynu,    SUM(ob_IloscMag * ob_Znak) as ob_IloscMag,
SUM(ob_WartBrutto * ob_Znak) AS OBRÓT,

CASE WHEN dok_MagId = 7 THEN SUM(ob_WartBrutto * ob_Znak)-15000
ELSE SUM(ob_WartBrutto * ob_Znak)-5000 END
as obrót_min_kwota,

CONVERT(MONEY, 0) as marza FROM vwZstSprzWgKhnt
WHERE dok_Status <> 2 
AND ( (dok_DataWyst BETWEEN  {DR:Data:}  )
AND (dbo.fnMAKE_DOKPARAM(dok_Typ, dok_Podtyp)
IN (131072,131075, 131077,131074,4063232,262144,393216,393217,1376256,1376258,1376257,1376259,917504,917505))

AND (dok_MagId>3))

GROUP BY dok_MagId
Tytuł: Odp: ZAPYTANIE OBRÓT WG MAGAZYNÓW +"CASE"
Wiadomość wysłana przez: Yasi_00 w Październik 02, 2015, 10:08:23
mam jeszcze jedno pytanie ,
gdyż obliczenie jest minimalnie bardziej złożone ,
jak ustawić aby wynik w kolumnie ładnie wyglądał, bez zer na przodzie oraz tylko 2 miejsca po przecinku
 
(SUM(ob_WartBrutto * ob_Znak)-15000)*0.01
Tytuł: Odp: ZAPYTANIE OBRÓT WG MAGAZYNÓW +"CASE"
Wiadomość wysłana przez: birds22 w Październik 02, 2015, 10:31:22
na przykład tak:
*cast(0.01 as money)
Tytuł: Odp: ZAPYTANIE OBRÓT WG MAGAZYNÓW +"CASE"
Wiadomość wysłana przez: Yasi_00 w Październik 02, 2015, 10:56:48
na przykład tak:
*cast(0.01 as money)

super dzięki
Tytuł: Odp: ZAPYTANIE OBRÓT WG MAGAZYNÓW +"CASE"
Wiadomość wysłana przez: Yasi_00 w Październik 02, 2015, 11:26:31
mogę prosić o info
jak dopisać kolumnę z nazwą magazynu po  dok_MagId,
mogę pokusić się o zdefiniowanie prze CASE-a, ale napewno macie lepszy pomysł .. :)
Tytuł: Odp: ZAPYTANIE OBRÓT WG MAGAZYNÓW +"CASE"
Wiadomość wysłana przez: dkozlowski w Październik 02, 2015, 17:19:11
Słownik magazynów znajduje się w tabeli "sl_Magazyn", "sl" to skrót od "słownik"... ;)
Tytuł: Odp: ZAPYTANIE OBRÓT WG MAGAZYNÓW +"CASE"
Wiadomość wysłana przez: Yasi_00 w Październik 07, 2015, 10:10:11
dodałem

LEFT JOIN sl_Magazyn
ON vwZstSprzWgKhnt .dok_MagId= sl_Magazyn.mag_Nazwa

klikam test -> "zlecenie jest poprawne"
próbuje uruchomić i niestety nie działa..
Tytuł: Odp: ZAPYTANIE OBRÓT WG MAGAZYNÓW +"CASE"
Wiadomość wysłana przez: birds22 w Październik 07, 2015, 10:13:34
Ale co nie działa?
Nic nie pokazuje się w wyniku zestawienia?


Pokaż całe zestawienie.
Tytuł: Odp: ZAPYTANIE OBRÓT WG MAGAZYNÓW +"CASE"
Wiadomość wysłana przez: Yasi_00 w Październik 07, 2015, 11:09:06
proszę


SELECT dok_MagId as id_Magazynu,

CASE
 WHEN dok_MagId = 6  THEN  '5000'   
 WHEN dok_MagId = 7  THEN  '15000'   
 WHEN dok_MagId = 8  THEN  '5000'   
 WHEN dok_MagId = 9  THEN  '5000'   

END as WYSOKOŚĆ_PROGU,



SUM(ob_IloscMag * ob_Znak) as Ilość_sprzed_towaru,

SUM(ob_WartBrutto * ob_Znak) AS OBRÓT,

CASE WHEN dok_MagId = 7 THEN SUM(ob_WartBrutto * ob_Znak)-15000 ELSE SUM(ob_WartBrutto * ob_Znak)-5000 END  as obrót_min_prog,

CASE WHEN dok_MagId = 7 THEN   

CASE WHEN CAST((SUM(ob_WartBrutto * ob_Znak)-15000) *0.01 as money)  < 1 THEN  '0' ELSE      CAST((SUM(ob_WartBrutto * ob_Znak)-15000) *0.01 as money)  END

 ELSE

CASE
WHEN CAST((SUM(ob_WartBrutto * ob_Znak)-5000) *0.01 as money)  < 1 THEN  '0' ELSE      CAST((SUM(ob_WartBrutto * ob_Znak)-5000) *0.01 as money)  END



END
 as PREMIA_1PROC
 FROM vwZstSprzWgKhnt

LEFT JOIN sl_Magazyn
ON vwZstSprzWgKhnt .dok_MagId= sl_Magazyn.mag_Nazwa

WHERE dok_Status <> 2 



AND ( (dok_DataWyst BETWEEN  {DR:Data:}  )
AND (dbo.fnMAKE_DOKPARAM(dok_Typ, dok_Podtyp)
IN (131072,131075, 131077,131074,4063232,262144,393216,393217,1376256,1376258,1376257,1376259,917504,917505))

AND (dok_MagId>3))

GROUP BY dok_MagId ORDER BY SUM(ob_WartBrutto * ob_Znak) DESC

;



Tytuł: Odp: ZAPYTANIE OBRÓT WG MAGAZYNÓW +"CASE"
Wiadomość wysłana przez: birds22 w Październik 07, 2015, 11:21:28
dodałem

LEFT JOIN sl_Magazyn
ON vwZstSprzWgKhnt .dok_MagId= sl_Magazyn.mag_Nazwa

klikam test -> "zlecenie jest poprawne"
próbuje uruchomić i niestety nie działa..

Dlaczego po "vwZstSprzWgKhnt" jest spacja?

Łączysz identyfikator(dok_MagId) z nazwą(mag_Nazwa) - jak to ma zadziałać?