首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将列中的值映射到SQL中的值

将列中的值映射到SQL中的值
EN

Stack Overflow用户
提问于 2019-01-04 04:03:43
回答 3查看 3.6K关注 0票数 1

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

我查看了CASE语句,但有200个替换项需要进行替换,而CASE是不够的

代码语言:javascript
复制
SELECT dummy FROM TestTable;

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

代码语言:javascript
复制
dummy
LOT_NUMBER
LOT_NUMBER_XREF

将替换为

代码语言:javascript
复制
dummy
Lot Number
Lot Number Cross-Reference
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-01-04 04:12:14

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

下面的SQL用新值替换旧值(如果未定义转换,则保留原值):

代码语言:javascript
复制
SELECT 
    COALESCE(m.new_value, t.value)
FROM 
    table t
    LEFT JOIN mapping_table m 
        ON t.value = m.old_value

对于有限数量的要翻译的值,可以大小写。或者使用联合的CTE:

代码语言:javascript
复制
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
票数 3
EN

Stack Overflow用户

发布于 2019-01-04 04:16:05

如果你不能使用交叉引用表,可以使用(你必须在你的应用程序中生成)子查询或cte!CTE:

代码语言:javascript
复制
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

或SubQuery:

代码语言:javascript
复制
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
票数 1
EN

Stack Overflow用户

发布于 2019-01-04 04:20:56

如果你有一些通用的东西,比如_字符,那么你可以使用LIKE运算符和

代码语言:javascript
复制
             SELECT replace(dummy,'_',' ') from table where 
             dummy like '%_%'   -- check generic regex

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54029037

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档