首页 > 解决方案 > 使用另一个表中去年的计算更新列

问题描述

我正在尝试通过将销售少于 12 个的项目突出显示为“D”(停止)来更新(对三个表使用内连接)表的STAT项目统计信息。IM_ITEM

第二个表PS_TKT_HIST_LINQTY_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

它带有一个错误任何建议请

标签: sql-serverdatesql-updateinner-joincalculated-columns

解决方案


您应该使用HAVING子句而不是Sumin 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

推荐阅读