【问题标题】:Input mapping in SQL?SQL中的输入映射?
【发布时间】:2020-11-13 13:34:12
【问题描述】:

因此,在许多编程语言中,您的输入映射看起来像这样。

function mapping(input) {

var map = {
"case1" : "output1"
"case2" : "output2"
"case3" : "output3"
}

return map[input] || "output4"

}

这基本上可以替换一堆 if/thens,如:

var output;
If (input ==  "case1") {
output = "output1"
} else f (input ==  "case2") {
output = "output2"
} else f (input ==  "case3") {
output = "output3"
} else {
output = "output4"
} 
    
return output

我的问题是……有没有办法在 SQL Server 中执行此操作来替换 case 语句中的一堆 when/thens?所以如果这是我的代码(实际上我有更多的案例)

SET someTable.SomeValue = (CASE
    WHEN Name = 'case1' THEN
    'output1'
    WHEN Name = 'case2' THEN
    'output2'
    WHEN Name = 'case3' THEN
    'output3'
    WHEN Name = 'case4' THEN
    "output4"
END) FROM TableName

有没有更简洁的方法来做到这一点? IE。输入地图或类似的替代方案?

【问题讨论】:

    标签: sql sql-server mapping


    【解决方案1】:

    最直接的方法是创建一个临时表,其中所需的键作为一列,匹配的值作为第二行。然后您可以简单地加入该表。无需案例说明。

    select id, val_col
    from main
     inner join lookup
      on main.key_col = lookup.key_col
    

    给定以下 DDL:

    create table main (id integer, key_col varchar(50));
    create table lookup (key_col varchar(50), val_col varchar(50));
    
    insert into main values (1, 'no good');
    insert into lookup values ('no good', 'good');
    

    如果您想即时执行此操作,例如使用公用表表达式,请执行以下操作:

    with lookup as (
      select 'no good' key_col, 'good' val_col
      union
      select 'This I do not like' key_col, 'this I like' val_col
      union
      select 'Another unlikable one' key_col , 'also good' val_col ) 
    select id, val_col
    from main
     inner join lookup
      on main.key_col = lookup.key_col;
    

    See a demonstration in this Fiddle

    与 T-SQL 中的键值对象最接近的是 JSON,因此您可以使用 Jason 值创建一个临时表并对其进行解析,尽管目前尚不清楚它如何改进基本临时表。

    At the bottom of this page are some details on how it might work.

    【讨论】:

      猜你喜欢
      • 2011-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-11
      • 1970-01-01
      • 2013-11-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多