【发布时间】:2020-08-21 12:12:27
【问题描述】:
有一个表需要更正多列中的值。然后是一个包含所有需要更正的值的表。
有没有一种简单的方法如何在 MERGE 语句中使用 CROSS APPLY?
根据我目前的知识,我需要为 column1、column2 等运行以下代码。
MERGE INTO target_table AS t
USING source_table AS s
ON t.key_column = s.key_column
AND 'column_1' = s.correction_column
WHEN MATCHED THEN
UPDATE SET t.column_1 = s.correction_value;
编辑: 这些是目标、源和预期结果的玩具示例。
目标:
## | uid | col_1 | col_2 | col_3 | col_4 | col_5
----------------------------------------------------
## 1 | 1 | a | a | a | a | a
## 2 | 2 | a | a | a | a | a
## 3 | 3 | a | a | a | a | a
## 4 | 4 | a | a | a | a | a
## 5 | 5 | a | a | a | a | a
## 6 | 6 | a | a | a | a | a
来源:
## | uid | col | value
----------------------------
## 1 | 1 | col_1 | B
## 2 | 1 | col_2 | C
## 3 | 4 | col_3 | D
## 4 | 4 | col_4 | E
## 5 | 5 | col_3 | F
预期结果:
## | uid | col_1 | col_2 | col_3 | col_4 | col_5
----------------------------------------------------
## 1 | 1 | B | C | a | a | a
## 2 | 2 | a | a | a | a | a
## 3 | 3 | a | a | a | a | a
## 4 | 4 | a | a | D | E | a
## 5 | 5 | a | a | F | a | a
## 6 | 6 | a | a | a | a | a
【问题讨论】:
-
您希望将
CROSS APPLY准确地放在哪里?CROSS APPLYing 你也是什么表值函数?帮助我们帮助您。样本数据和预期结果也会对此有所帮助。 -
我同意@Larnu,我们需要更多信息才能在这里提供帮助。附带说明一下,当使用
MERGE语句时,我的目标表仅作为表列出,而我的源表通常是一个查询。如果它是一个复杂的查询(或者您需要过滤分区/窗口字段),那么您可以使用CTE引导到MERGE语句。 -
我已添加示例数据和预期结果。我没有任何表值函数。也许我对 CROSS APPLY 的看法是错误的,但我认为它是解决我问题的功能。
标签: sql-server tsql cross-apply sql-merge