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
-
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ź?
-
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" ?
-
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
-
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
-
na przykład tak:
*cast(0.01 as money)
-
na przykład tak:
*cast(0.01 as money)
super dzięki
-
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ł .. :)
-
Słownik magazynów znajduje się w tabeli "sl_Magazyn", "sl" to skrót od "słownik"... ;)
-
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..
-
Ale co nie działa?
Nic nie pokazuje się w wyniku zestawienia?
Pokaż całe zestawienie.
-
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
;
-
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ć?