首页 > 解决方案 > 使用两个表中的 CASE 进行选择性更新

问题描述

我有两张桌子 ItemMeasure.

物品:

ItemName    |   Unit    |   Extra5
------------|-----------|--------
bolt        |   PCS     |   
nut         |   M2      |   
Screw       |   M3      |   
Slug        |   JM      |   

措施:

ItemName    |   Unit    |   QtyPerMeasure
------------|-----------|--------------
bolt        |   PCS     |   1
bolt        |   M2      |   2
bolt        |   M3      |   3
bolt        |   JM      |   4
nut         |   PCS     |   11
nut         |   M2      |   22
nut         |   M3      |   33
nut         |   JM      |   44
Screw       |   PCS     |   111
Screw       |   M2      |   222
Screw       |   M3      |   333
Screw       |   JM      |   444
Slug        |   PCS     |   1.1
Slug        |   M2      |   2.2
Slug        |   M3      |   3.3
Slug        |   JM      |   4.4

我需要以查询选择相应值的方式更新Extra5表中的字段。ItemUnit

结果应如下所示:

ItemName    |   Unit    |   Extra5
------------|-----------|--------
bolt        |   PCS     |   1
nut         |   M2      |   22
Screw       |   M3      |   333
Slug        |   JM      |   4.4

到目前为止我已经尝试过:

UPDATE 
    Item 
SET 
    Extra5 = 
        CASE (SELECT Unit FROM Item)
        WHEN 'PCS' THEN SELECT Unit FROM Measure WHERE yksikko = 'PCS'
        WHEN 'JM' THEN SELECT Unit FROM Measure WHERE yksikko = 'JM'
        WHEN 'M2' THEN SELECT Unit FROM Measure WHERE yksikko = 'M2'
        WHEN 'M3' THEN SELECT Unit FROM Measure WHERE yksikko = 'M3'
FROM
    Item a
    INNER JOIN Measure b
        ON a.ItemName = b.ItemName

这给了我一个错误: Msg 156, Level 15, State 1, Line 16. Incorrect syntax near the keyword 'SELECT'.

我在想是否CASE毕竟是正确的方法。我是在完全错误的方向吗?

任何帮助将不胜感激。

标签: sql-servertsqljoinsql-updatecase

解决方案


UPDATE I
SET I.Extra5 = M.QtyPerMeasure
FROM Item AS I
INNER JOIN Measure AS M ON M.ItemName = I.ItemName
    AND M.Unit = I.Unit

说明:查询将通过匹配 Item 和 Measure 表的 itemname 和 unit 列值来更新 Extra5 列。


推荐阅读