我试图通过突出显示销售少于12的项目作为“ D”(停用)来更新(使用三个表的内部联接)表STAT
的项目统计IM_ITEM
。
第二表PS_TKT_HIST_LIN
的每一天都有每个项目的售出数量列QTY_SOLD
和日期列BUS_DAT
。
我还需要第三个表IM_INV
来过滤数据,我需要说这些商品的最后接收日期LST_RECV_DAT
早于“ 2019-01-01”,而最后销售日期LST_SAL_DAT
则晚于“ 2019-01-01”。我使用了以下代码
UPDATE M
SET M.STAT = 'D'
FROM
dbo.IM_ITEM AS M
INNER JOIN
IM_INV AS N
ON
M.ITEM_NO = N.ITEM_NO
INNER JOIN
dbo.PS_TKT_HIST_LIN S`
ON
M.ITEM_NO = S.ITEM_NO
WHERE
CONVERT(DATETIME, FLOOR(CONVERT(FLOAT, N.LST_RECV_DAT))) <= '2019-01-01'
AND CONVERT(DATETIME, FLOOR(CONVERT(FLOAT, N.LST_SAL_DAT))) >= '2019-01-01'
AND M.STAT = 'A'
AND SUM(case when DATEPART(YYYY, (BUS_DAT)) = DATEPART(YYYY, DATEADD(YYYY, -1, getdate()))
AND DATEPART(yyyy, (BUS_DAT)) = DATEPART(yyyy, DATEADD(YYYY, -1, getdate()))
then qty_sold else 0)<12
带有错误任何建议请
您应该使用HAVING
子句,而不要使用Sum
中的where
。
您可以使用CTE
来获取该值,然后进行相应的更新。
;with cte as(
select ITEM_NO, ..
from ..
group by ITEM_NO
having .. < 12
)
update M
set SET M.STAT = 'D'
from dbo.IM_ITEM AS M
inner join cte on M.ITEM_NO = cte.ITEM_NO
除非在子查询中定义,否则您不能在where子句中使用aggregate
函数。