首页 > 解决方案 > 当第一个表是基于列的,第二个是基于行的时,用另一个表中的金额更新一个表中的金额

问题描述

我有两张桌子,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 个字段。

标签: sqlsql-serversql-update

解决方案


那你可以试试这样的。

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

不是最优雅的方法,但如果只有三个更新,在现实世界中这是一个快速且可行的解决方案。可扩展性将取决于您拥有多少行。


推荐阅读