【问题标题】:Update column based on two column values with many combinations基于具有多种组合的两列值更新列
【发布时间】:2022-01-07 18:53:58
【问题描述】:

我想根据我尝试使用此方法的一种方式根据两列更新单个列

UPDATE Table_name
    Set column_name=1 
WHERE col_1 = 120 and col_2 = 1991110

我尝试使用 case 表达式

UPDATE table_name
    SET column_name = 
        CASE 
        when col_1 = 2 and col_2 = 1991111 then 2
        when col_1 = 3 and col_2 = 1991110 then 3
        .
        .
        .
        .
        .
        .
        else 0
        end

但问题是我有 380 种 col_1 和 col_2 的组合,所以如果我使用这种方法,我会使用 380 次。我想要一些建议。

预期输出:

col1     col2      col3
1       1991110     1
2       1991111     2
3       1991110     3
4       1991111     4 

【问题讨论】:

  • 如果这些值都是提前知道的,您可以将它们放在一个单独的表中,连接两个常见的列并使用set column_name = 中的第三列进行实际更新。这种方法还可以在以后为您提供可调试性。
  • 如果你有 380 种组合......它们是不可计算的,那么你如何想象有可能改进你所拥有的?

标签: sql sql-server tsql


【解决方案1】:

380 种可能的更新组合属于单独的表。为了便于说明,我们可以在此处对包含组合的子查询进行更新连接:

UPDATE t1
SET column_name = t2.val
FROM table_name t1
INNER JOIN
(
    SELECT 2 AS col_1, 1991111 AS col_2, 2 AS val UNION ALL
    SELECT 3, 1991110, 3 UNION ALL
    ...
) t2
    ON t2.col_1 = t1.col_1 AND t2.col_2 = t1.col_2;

为方便起见,上面别名为t2 的子查询可以维护一个单独的真实表。

【讨论】:

    猜你喜欢
    • 2018-09-19
    • 1970-01-01
    • 2022-08-11
    • 2019-12-30
    • 2021-11-14
    • 2015-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多