sql - 当第一个表是基于列的,第二个是基于行的时,用另一个表中的金额更新一个表中的金额
问题描述
我有两张桌子,A和B。
A就像
一项政策 | 价值第一类 | 价值第二类 | 价值第三类 | …… |
---|---|---|---|---|
10 | 15000 | 2000 | 75000 | ... |
11 | 12500 | 2500 | 7000 | ... |
12 | ... | ... | ... | ... |
... | ... | ... | ... | ... |
字段中的金额Value Category X
不正确。我想通过表 B 更新这些金额,就像
B_政策 | 类别 | 价值 | ... | …… |
---|---|---|---|---|
10 | 1 | 11000 | ... | ... |
10 | 2 | 1500 | ... | ... |
10 | 3 | 8500 | ... | ... |
11 | 1 | 12500 | ... | ... |
... | ... | ... | ... | ... |
我们该如何进行?这里的困难在于我们有三个字段用于表 A 中的值,而表 B 中的值只有 1 个字段。
解决方案
那你可以试试这样的。
DECLARE @table_a AS TABLE ( A_Policy INT, First INT, Second INT, Third INT )
DECLARE @table_b AS TABLE ( B_Policy INT, Cat INT, Value INT )
INSERT INTO @table_a ( A_Policy, First, Second, Third )
VALUES ( 10, 15000, 2000, 75000 )
, ( 11, 12500, 2500, 7000 )
INSERT INTO @table_b ( B_Policy, Cat, Value )
VALUES ( 10, 1, 11000 )
, ( 10, 2, 150 )
, ( 10, 3, 8500 )
, ( 11, 1, 12500 )
SELECT *
FROM @table_a
UPDATE a
SET First = Value
FROM @table_a a
JOIN @table_b b ON a.A_Policy = b.B_Policy
AND b.Cat = 1
UPDATE a
SET Second = Value
FROM @table_a a
JOIN @table_b b ON a.A_Policy = b.B_Policy
AND b.Cat = 2
UPDATE a
SET Third = Value
FROM @table_a a
JOIN @table_b b ON a.A_Policy = b.B_Policy
AND b.Cat = 3
SELECT *
FROM @table_a
不是最优雅的方法,但如果只有三个更新,在现实世界中这是一个快速且可行的解决方案。可扩展性将取决于您拥有多少行。
推荐阅读
- python - 使用openpyxl比较两个excel文件
- excel - Excel/Google 表格将列转置为行标题
- angular - 在 Angular 5/6 中的自我更改事件中,在 @ng-select/ng-select 中设置默认下拉 bindLabel?
- sql-server - 在表格中按字母顺序对列名进行排序
- ios - 如何避免 IQKeyboard 也向上滚动导航栏?
- php - 使用 jquery 的 PHP 自动完成
- r - 使用 R 创建数据表
- algorithm - 我们可以使用最佳优先搜索解决 4 Queen 问题吗?
- angular - 在角度 4 中单击模型外部时如何停止引导模型关闭
- android - api.DeviceException 在本机反应