首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用字段名作为列名选择列值

使用字段名作为列名选择列值
EN

Stack Overflow用户
提问于 2014-08-07 12:46:58
回答 1查看 93关注 0票数 0

我相信一定有一个更容易的方法,我做这件事,我正在把自己进一步陷入混乱,只是想让我的头脑,我是如何设置这件事!

我有一个价格查找表,根据数量有4个不同的价格,所以下面的表格布局显示了productID,数量,然后4个价格(价格不同的范围)。

代码语言:javascript
复制
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

代码语言:javascript
复制
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‘的实际名称可能会改变,这取决于用户在选择.

代码语言:javascript
复制
UPDATE tblOrderline
SET price = (SELECT ***'range 1'*** FROM tblPriceLookup WHERE quoteProductID = 1 AND qty = 2)
WHERE orderID = 13 AND quoteProductID = 1
EN

Stack Overflow用户

回答已采纳

发布于 2014-08-07 12:51:58

如果我正确理解,您可以使用一个update/join和一个case语句来完成这个任务:

代码语言:javascript
复制
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国家:

代码语言:javascript
复制
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子句(在调整表和列名之后),您应该能够获得同样的效果。

票数 5
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25182946

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档