Autor Wątek: ZAPYTANIE OBRÓT WG MAGAZYNÓW +"CASE"  (Przeczytany 8209 razy)

0 użytkowników i 3 Gości przegląda ten wątek.

Offline Yasi_00

  • Aktywny użytkownik
  • ***
  • Wiadomości: 140
  • Reputacja +1/-0
  • Wersja programu: INSERT GT 1.34 HF2
ZAPYTANIE OBRÓT WG MAGAZYNÓW +"CASE"
« dnia: 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ź?
Pomogłem proszę o +

Offline dkozlowski

  • Ekspert
  • *****
  • Wiadomości: 17189
  • Reputacja +800/-27
  • Wersja programu: GT/Navireo/nexo
Odp: ZAPYTANIE OBRÓT WG MAGAZYNÓW +"CASE"
« Odpowiedź #1 dnia: 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) 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" ?
Daniel, Białystok.

Offline Yasi_00

  • Aktywny użytkownik
  • ***
  • Wiadomości: 140
  • Reputacja +1/-0
  • Wersja programu: INSERT GT 1.34 HF2
Odp: ZAPYTANIE OBRÓT WG MAGAZYNÓW +"CASE"
« Odpowiedź #2 dnia: 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
Pomogłem proszę o +

Offline Yasi_00

  • Aktywny użytkownik
  • ***
  • Wiadomości: 140
  • Reputacja +1/-0
  • Wersja programu: INSERT GT 1.34 HF2
Odp: ZAPYTANIE OBRÓT WG MAGAZYNÓW +"CASE"
« Odpowiedź #3 dnia: 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
Pomogłem proszę o +

Offline birds22

  • Ekspert
  • *****
  • Wiadomości: 9228
  • Reputacja +1306/-21
  • Wersja programu: Najnowsza
Odp: ZAPYTANIE OBRÓT WG MAGAZYNÓW +"CASE"
« Odpowiedź #4 dnia: Październik 02, 2015, 10:31:22 »
na przykład tak:
*cast(0.01 as money)
Sławek, Zduńska Wola

Offline Yasi_00

  • Aktywny użytkownik
  • ***
  • Wiadomości: 140
  • Reputacja +1/-0
  • Wersja programu: INSERT GT 1.34 HF2
Odp: ZAPYTANIE OBRÓT WG MAGAZYNÓW +"CASE"
« Odpowiedź #5 dnia: Październik 02, 2015, 10:56:48 »
na przykład tak:
*cast(0.01 as money)

super dzięki
Pomogłem proszę o +

Offline Yasi_00

  • Aktywny użytkownik
  • ***
  • Wiadomości: 140
  • Reputacja +1/-0
  • Wersja programu: INSERT GT 1.34 HF2
Odp: ZAPYTANIE OBRÓT WG MAGAZYNÓW +"CASE"
« Odpowiedź #6 dnia: 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ł .. :)
Pomogłem proszę o +

Offline dkozlowski

  • Ekspert
  • *****
  • Wiadomości: 17189
  • Reputacja +800/-27
  • Wersja programu: GT/Navireo/nexo
Odp: ZAPYTANIE OBRÓT WG MAGAZYNÓW +"CASE"
« Odpowiedź #7 dnia: Październik 02, 2015, 17:19:11 »
Słownik magazynów znajduje się w tabeli "sl_Magazyn", "sl" to skrót od "słownik"... ;)
Daniel, Białystok.

Offline Yasi_00

  • Aktywny użytkownik
  • ***
  • Wiadomości: 140
  • Reputacja +1/-0
  • Wersja programu: INSERT GT 1.34 HF2
Odp: ZAPYTANIE OBRÓT WG MAGAZYNÓW +"CASE"
« Odpowiedź #8 dnia: 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..
Pomogłem proszę o +

Offline birds22

  • Ekspert
  • *****
  • Wiadomości: 9228
  • Reputacja +1306/-21
  • Wersja programu: Najnowsza
Odp: ZAPYTANIE OBRÓT WG MAGAZYNÓW +"CASE"
« Odpowiedź #9 dnia: Październik 07, 2015, 10:13:34 »
Ale co nie działa?
Nic nie pokazuje się w wyniku zestawienia?


Pokaż całe zestawienie.
Sławek, Zduńska Wola

Offline Yasi_00

  • Aktywny użytkownik
  • ***
  • Wiadomości: 140
  • Reputacja +1/-0
  • Wersja programu: INSERT GT 1.34 HF2
Odp: ZAPYTANIE OBRÓT WG MAGAZYNÓW +"CASE"
« Odpowiedź #10 dnia: 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

;



Pomogłem proszę o +

Offline birds22

  • Ekspert
  • *****
  • Wiadomości: 9228
  • Reputacja +1306/-21
  • Wersja programu: Najnowsza
Odp: ZAPYTANIE OBRÓT WG MAGAZYNÓW +"CASE"
« Odpowiedź #11 dnia: 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ć?
Sławek, Zduńska Wola

Forum Użytkownikow Subiekt GT

Odp: ZAPYTANIE OBRÓT WG MAGAZYNÓW +"CASE"
« Odpowiedź #11 dnia: Październik 07, 2015, 11:21:28 »