Hej,
Potrzebowałem napisać zestawienie, którym z automatu aktualizowałbym stany minimalne towarów z możliwością wyboru:
- Ile miesięcy wstecz brać pod uwagę
- Wybór grup towarów
- Wybór cech towarów
Wszystko działa dobrze. Wstawiam w ramach edukacyjnych licząc na krytykę i sugestie co można by poprawić i co niepotrzebnie robię (a jednocześnie może komuś się takie zestawienie przyda)
SELECT 1
UPDATE tw__towar
SET tw__towar.tw_StanMin = (SELECT T_StanMin.StanMin
FROM(
SELECT T_T1.tw_Id,
CASE WHEN (
CASE WHEN DATEDIFF(MONTH, pwd_Data01, GETDATE()) < {I:Ile miesięcy wstecz}
THEN CEILING(SUM(T1.ob_IloscMag)/DATEDIFF(MONTH, pwd_Data01, GETDATE()))
ELSE CEILING(SUM(T1.ob_IloscMag)/{I:Ile miesięcy wstecz})
END) IS NULL
THEN 0
ELSE (
CASE WHEN DATEDIFF(MONTH, pwd_Data01, GETDATE()) < {I:Ile miesięcy wstecz}
THEN CEILING(SUM(T1.ob_IloscMag)/DATEDIFF(MONTH, pwd_Data01, GETDATE()))
ELSE CEILING(SUM(T1.ob_IloscMag)/{I:Ile miesięcy wstecz})
END)
END AS StanMin
FROM tw__Towar AS T_T1
LEFT JOIN pw_Dane ON pwd_IdObiektu = tw_Id
LEFT JOIN
(
SELECT D_P1.ob_TowId, D_P1.ob_IloscMag
FROM dok_Pozycja AS D_P1
INNER JOIN dok__dokument AS D_D1 ON D_D1.dok_Id = D_P1.ob_DokHanId
WHERE
D_D1.dok_DataMag BETWEEN DATEADD(MONTH, -{I:Ile miesięcy wstecz},GETDATE()) AND GETDATE()
AND
(D_D1.dok_Typ in (2, 21 ) AND NOT D_D1.dok_podtyp IN (1))
) AS T1 ON T1.ob_TowId = tw_Id
WHERE
pwd_Data01 IS NOT NULL
GROUP BY T_T1.tw_Id, pwd_Data01) AS T_StanMin
WHERE tw__Towar.tw_Id = T_StanMin.tw_Id)
WHERE
tw__Towar.tw_id IN (
SELECT K.tw_Id
FROM tw__Towar AS K
LEFT JOIN tw_Stan ON st_TowId = tw_id
LEFT JOIN tw_CechaTw ON cht_IdTowar = tw_id
WHERE
tw_IdGrupa IN ({CHL_DB: SELECT grt_id, grt_Nazwa FROM sl_grupatw ORDER BY grt_nazwa:Grupa})
AND
cht_IdCecha IN ({CHL_DB: SELECT ctw_Id, ctw_Nazwa as name FROM sl_CechaTw ORDER BY name:Cecha})
AND
st_MagId = 1
AND
tw_Zablokowany = 0
)