sql-server - 使用另一个表中去年的计算更新列
问题描述
我正在尝试通过将销售少于 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
in 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
推荐阅读
- python - 在 tkinter 窗口中显示打开文件的位置名称
- javascript - 下一张幻灯片按钮
- python - 使用 Python 如何从 CI Jenkins 服务器中的 AWS 参数存储中获取数据(每晚运行我的测试)
- google-apps-script - Google App Script - Json 响应解析
- javascript - 压缩了一些代码,想知道我是否添加了任何意外的漏洞或问题:
- c - 何时在 C 函数中使用 const
- xamarin.ios - 更改 RootView 控制器 Xamarin IOS 应用程序
- c# - 服务程序中的 LocalApplicationData 与控制台应用程序中的不同
- serverless-framework - 用于生产的备用 lambda 函数部署
- python - 更有效的分类方式