我相信一定有一个更容易的方法,我做这件事,我正在把自己进一步陷入混乱,只是想让我的头脑,我是如何设置这件事!
我有一个价格查找表,根据数量有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语句,以便在orderline表中检索和存储Range 1的价格,数量为2(‘t 315),但不知道如何将这两个表连接在一起?
我已经研究过将Range Name字段的值作为变量使用,并在传递给它的字段名的SQL语句上使用EXEC,但对于我要寻找的内容来说,它似乎太复杂了吗?
谢谢你找我!
(增加编辑)
??编辑??编辑?
这是我可以用来更新价格的SQL,但是下面的SQL中字段'range 1‘的实际名称可能会改变,这取决于用户在选择.
UPDATE tblOrderline
SET price = (SELECT ***'range 1'*** FROM tblPriceLookup WHERE quoteProductID = 1 AND qty = 2)
WHERE orderID = 13 AND quoteProductID = 1
发布于 2014-08-07 12:51:58
如果我正确理解,您可以使用一个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
子句(在调整表和列名之后),您应该能够获得同样的效果。
https://stackoverflow.com/questions/25182946
复制相似问题