【问题标题】:Map values in column to values in SQL将列中的值映射到 SQL 中的值
【发布时间】:2019-01-03 20:03:43
【问题描述】:

我想用 SQL 中的相应值替换某些值。我无法创建交叉引用表。这些值可以在我的应用程序的“txt”或“属性”文件中指定

我查看了 CASE 声明,但我有 200 个替换项,而 CASE 是不够的

SELECT dummy FROM TestTable;

在我的回答中,如果我得到LOT_NUMBER,我想用Lot Number 替换它,或者如果我得到LOT_NUMBER_XREF,我想用Lot Number Cross-Reference 替换它

dummy
LOT_NUMBER
LOT_NUMBER_XREF

替换为

dummy
Lot Number
Lot Number Cross-Reference

【问题讨论】:

标签: mysql sql subquery left-join


【解决方案1】:

如果您有许多不同的值要替换,您应该创建一个表来存储旧值到新值的映射。然后,您可以在查询中加入该表。

下面的 SQL 用新值替换旧值(或保持原样,如果没有定义翻译):

SELECT 
    COALESCE(m.new_value, t.value)
FROM 
    table t
    LEFT JOIN mapping_table m 
        ON t.value = m.old_value

对于要翻译的有限数量的值,您可以使用 CASE。或者可能是带有 UNION 的 CTE:

WITH mapping_table AS (
    SELECT 'LOT_NUMBER' AS old_value, 'Lot Number' AS new_value
    SELECT 'LOT_NUMBER_XREF', 'Lot Number Cross-Reference'
)
SELECT 
    COALESCE(m.new_value, t.value)
FROM 
    table t
    LEFT JOIN mapping_table m 
        ON t.value = m.old_value

【讨论】:

    【解决方案2】:

    如果您不能使用交叉引用表,请改用(您必须在您的应用中生成)子查询或 cte! CTE:

    with mapping as (
     select 'LOT_NUMBER' as old_value, 'Lot Number' as new_value
     union all select 'LOT_NUMBER_XREF', 'Lot Number Cross-Reference'
    )
    select 
     t.value,
     coalesce(m.new_value, 'none') as new_value
    from tbl_your_table t
    left join mapping m on t.value = m.old_value
    

    或子查询:

    select 
     t.value,
     coalesce(m.new_value, 'none') as new_value
    from tbl_your_table t
    left join (
     select 'LOT_NUMBER' as old_value, 'Lot Number' as new_value
     union all select 'LOT_NUMBER_XREF', 'Lot Number Cross-Reference'
    ) m on t.value = m.old_value
    

    【讨论】:

      【解决方案3】:

      如果你有像_ charecter 这样的通用字符,那么你可以使用LIKE 运算符和

                   SELECT replace(dummy,'_',' ') from table where 
                   dummy like '%_%'   -- check generic regex
      

      然后,在此基础上使用CASE WHENDUMMY IN(X,REF) Then REPLACE(DUMMY,'X',CROSS) 对其他人也是如此,这将减少病例数。

      问题只是检查通用术语,它们的替换存储它IN 子句预过滤最通用的术语。如果计数仍然很大,您需要一个临时表用于查找引用,如其他编程语言中的数组

      【讨论】:

        猜你喜欢
        • 2019-07-21
        • 2015-05-02
        • 2023-02-10
        • 2011-11-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-16
        • 1970-01-01
        相关资源
        最近更新 更多