sql中的输入Map?

kq4fsx7k  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(229)

所以在很多编程语言中,输入Map都是这样的。

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

我的问题是。。。在SQLServer中有没有一种方法来替换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

有没有更简洁的方法?i、 输入Map或类似的替代品?

lztngnrs

lztngnrs1#

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

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;

看到这把小提琴的示范了吗
在t-sql中,最接近key-value对象的是json,因此可以使用jason值创建一个临时表并对其进行解析,尽管还不清楚它是如何改进基本临时表的。
在这一页的底部有一些关于它如何工作的细节。

相关问题