我确信我必须有一种更简单的方法来做这件事,我只是想让自己陷入困境,试图了解我如何设置它!
我有一个价格查询表,根据数量有4种不同的价格,因此下面的表格布局显示了productID,数量,然后是4个价格(价格因范围而异)
product ID quantity range 1 range 2 range 3 range 4
1 1 231 265 395 231
1 2 315 345 615 315
1 3 415 485 775 415
在用户选择了产品和所选数量的另一个表格中,我在其自己的列中选择了所选范围的名称以及数量和产品ID
product ID quantity range name price
1 2 range 1 xxx <- Needs to be 315
我正在尝试执行某种UPDATE语句,以便我可以在订单行表中检索并存储数量为2(315英镑)的范围1的价格,但不知道如何加入这两个桌子在一起?
我已经研究过使用Range Name字段的值作为变量,并在SQL语句中使用EXEC并将字段名传递给它,但它似乎对我要查找的内容过于复杂?
感谢您的期待!
(已添加编辑)
----------- -------------- EDIT
这是我可用于更新价格的SQL,但下面SQL中字段“范围1”的实际名称可能会发生变化,具体取决于用户在选择时选择的范围...
UPDATE tblOrderline
SET price = (SELECT ***'range 1'*** FROM tblPriceLookup WHERE quoteProductID = 1 AND qty = 2)
WHERE orderID = 13 AND quoteProductID = 1
-----------编辑结束--------------
答案 0 :(得分:5)
如果我理解正确,您可以使用update
/ join
和case
声明执行此操作:
update othertable ot join
pricelookup pl
on ot.productId = pl.productId and ot.quantity = pl.quantity
set price = (case when rangename = 'range1' then range1
when rangename = 'range2' then range2
when rangename = 'range3' then range3
when rangename = 'range4' then range4
end);
编辑:
我认为你仍然需要case
状态:
UPDATE tblOrderline ol
SET price = (SELECT (case when ol.rangename = 'range1' then pl.range1
when ol.rangename = 'range2' then pl.range2
when ol.rangename = 'range3' then pl.range3
when ol.rangename = 'range4' then pl.range4
end)
FROM tblPriceLookup pl
WHERE pl.quoteProductID = 1 AND pl.qty = 2
)
WHERE orderID = 13 AND quoteProductID = 1;
通过在第一个查询中添加where
子句(调整表名和列名后),您应该能够获得相同的效果。