sql-server - 使用两个表中的 CASE 进行选择性更新
问题描述
我有两张桌子 Item
和Measure
.
物品:
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
表中的字段。Item
Unit
结果应如下所示:
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
毕竟是正确的方法。我是在完全错误的方向吗?
任何帮助将不胜感激。
解决方案
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 列。
推荐阅读
- c - Pset4(更舒适)- 模糊问题
- visual-c++ - 代码适用于其他 ide,但不适用于 Visual Studio 2019
- c# - 在单击事件功能上更改按钮内容不起作用c#
- flutter - 错误:“AppStateNotifier”类型的值不能分配给“Widget”类型的变量
- installation - 无法在 ubuntu 18.04 上启动 Julia v1.5.0,但 v1.0.4
- javascript - 显示 HTML 元素计数
- python - 怎么用try,除了写文件
- python - 为什么在具有一级索引的 MultiIndex 列的 pandas DataFrame 中表现不同?
- javascript - 我的欢迎信息令人困惑。(不和谐.js)
- java - 如何在新线程上不丢失我的 RequestAttributes?