首页 > 解决方案 > 使用 SQL 中单个列中所有可能的值组合更新表中的列

问题描述

对于所有可能的组合,如何使用其他列中的值更新表中的列?

例子:

COL1 |  COL2 |  COL3 | ClientKey  | MasterKey
-----+-------+-------+------------+------------     
123  |  345  |  678  |  AAA       |   AAA
N/A  |  345  |  678  |  BBB       |   AAA
N/A  |  N/A  |  678  |  CCC       |   AAA
N/A  |  345  |  N/A  |  DDD       |   AAA
123  |  345  |  N/A  |  EEE       |   AAA
123  |  N/A  |  678  |  FFF       |   AAA

第一行填充了所有值,并且它有一个键 (ClientKey)。如何使用 ClientKey 列更新 MasterKey 列,检查第一行可能出现的所有可能组合。'N/A' 值等同于 NULL 值。

标签: sql-servertsqlssms-2017

解决方案


假设我理解这个问题,最简单的方法是使用带有自连接的更新语句:

UPDATE t1
SET MasterKey = t0.ClientKey
FROM Table as t0
INNER JOIN Table as t1
    ON  (t0.Col1 = t1.Col1 OR t1.Col1 IS NULL)
    AND (t0.Col2 = t1.Col2 OR t1.Col2 IS NULL)
    AND (t0.Col3 = t1.Col3 OR t1.Col3 IS NULL)
WHERE t0.Col1 IS NOT NULL
AND t0.Col2 IS NOT NULL
AND t0.Col3 IS NOT NULL

推荐阅读