Sql 更新失败,大小写为
我正在尝试编写一个查询,它将根据特定时间段内售出的商品数量更新reorder_级别Sql 更新失败,大小写为,sql,sql-server,tsql,Sql,Sql Server,Tsql,我正在尝试编写一个查询,它将根据特定时间段内售出的商品数量更新reorder_级别 with a as (select invoice_itemized.itemnum, inventory.itemname, sum(invoice_itemized.quantity) as sold from invoice_itemized join inventory on invoice_itemized.itemnum=inventory.itemnum and inventory.ve
with a as (select invoice_itemized.itemnum, inventory.itemname,
sum(invoice_itemized.quantity) as sold
from invoice_itemized
join inventory on invoice_itemized.itemnum=inventory.itemnum and
inventory.vendor_number='COR' and inventory.dept_id='cigs'
join invoice_totals on
invoice_itemized.invoice_number=invoice_totals.invoice_number and
invoice_totals.datetime>=dateadd(month,-1,getdate())
group by invoice_itemized.itemnum, inventory.itemname)
update inventory
set reorder_level = case when a.sold/numpervencase>=5 then 30
when a.sold/numpervencase>=2 then 20
when a.sold/numpervencase>=1 then 5
else 1 end,
reorder_quantity = 1
from a
join inventory_vendors on a.itemnum=inventory_vendors.itemnum
用select替换更新将完全按照预期执行,从案例中返回正确的结果并选择94行
更新到位后,受更新6758影响的所有区域都设置为1。运行此操作,并查看结果:
with a as (select invoice_itemized.itemnum, inventory.itemname,
sum(invoice_itemized.quantity) as sold
from invoice_itemized
join inventory on invoice_itemized.itemnum=inventory.itemnum and
inventory.vendor_number='COR' and inventory.dept_id='cigs'
join invoice_totals on
invoice_itemized.invoice_number=invoice_totals.invoice_number and
invoice_totals.datetime>=dateadd(month,-1,getdate())
group by invoice_itemized.itemnum, inventory.itemname)
select a.sold, numpervencase, a.sold/numpervencase,
case
when a.sold/numpervencase>=5 then 30
when a.sold/numpervencase>=2 then 20
when a.sold/numpervencase>=1 then 5
else 1
end,
*
from a
join inventory_vendors on a.itemnum=inventory_vendors.itemnum
在更新之前选择一个好主意,检查数据是否如您所期望的那样结束
受更新影响的所有区域都设置为1
我把原料放入上面的查询中;看看总数是否如预期的那样。您可能需要将其中一个操作数强制转换为小数点:
1/2 = 0
1.0/2 = 0.5
它更新的行数远远超过了我的预期
从该选择中产生的每一行都将被更新。确定不想更新的行,并在其中放入where子句以删除它们
我是不是想得太多了
可能是测试不足
我需要cte吗
使其更易于表示,但不是-您可以通过将cte的内容作为子查询粘贴到中来获得相同的结果。。不管怎样,这就是db的有效功能
我的from声明放错地方了吗
我们不知道您想要的是什么结果,因此无法对其进行分析。这样做可能会产生语法错误,因此。。没有
实际问题似乎是
当你的案件总是要去其他地方,找出原因
您的cte选择了太多行,我无法判断您发布的数字是您得到的数字还是您期望的数字,但如果没有示例数据,这是非常没有意义的,请找出原因
解决了。当我向更新添加另一个连接时,它工作正常。我必须在inventory\u供应商上添加join inventory。itemnum=inventory.itemnum数量和numpervencase的数据类型是什么?听起来您可能有整数除法问题。另外,如果您注释掉更新库存及其后的所有内容,并插入select*from a,您是否得到了预期的结果?i、 e.您与这些特定供应商条件的总和是否如预期的那样有效?您不需要CTE。仅仅是一个带有join的更新并不能告诉你什么是错误的,因为你根本没有提供足够的信息。要验证查询,请首先将更新更改为SELECT查询,并检查返回的行是否为必需行。一旦选择查询正确,只需将其更改为更新查询请阅读有关改进问题的一些提示。因此,此选择仅返回94行,这与我的预期相符。它还返回a.sell/numpervencase的正确值,并正确显示小数。case语句也正常工作,并返回我想要的值。那么是什么差异导致更新版本执行不正确?