gpt4 book ai didi

sql - 如何在 CASE 语句中分配多个值?

转载 作者:行者123 更新时间:2023-12-03 20:34:10 24 4
gpt4 key购买 nike

我需要根据 CASE 语句为我的选择分配两个值。在伪:

select
userid
, case
when name in ('A', 'B') then 'Apple'
when name in ('C', 'D') then 'Pear'
end as snack
from
table
;

我正在为 snack 赋值.但是假设我还想为另一个变量赋值, drink基于相同的条件。一种方法是重复上述内容:
select
userid
, case
when name in ('A', 'B') then 'Apple'
when name in ('C', 'D') then 'Pear'
end as snack
, case
when name in ('A', 'B') then 'Milk'
when name in ('C', 'D') then 'Cola'
end as drink
from
table
;

但是,如果我必须根据相同的条件分配更多的值,请说 food , drink , room等。这段代码变得难以维护。

有没有更好的方法来做到这一点?我可以把它放在一个 SQL 函数中,就像你通常用另一种(脚本)语言做的那样,如果是这样,你能解释一下吗?

最佳答案

在做这样的事情时,我倾向于使用带有 table valued constructor 的连接。 :

SELECT  t.UserID,
s.Snack,
s.Drink
FROM Table AS T
LEFT JOIN
(VALUES
(1, 'Apple', 'Milk'),
(2, 'Pear', 'Cola')
) AS s (Condition, Snack, Drink)
ON s.Condition = CASE
WHEN t.name IN ('A', 'B') THEN 1
WHEN t.name IN ('C', 'D') THEN 2
END;

如果我需要添加更多条件或列,我发现这是最灵活的。

或者更详细,但也更灵活:
SELECT  t.UserID,
s.Snack,
s.Drink
FROM Table AS T
LEFT JOIN
(VALUES
('A', 'Apple', 'Milk'),
('B', 'Apple', 'Milk'),
('C', 'Pear', 'Cola'),
('D', 'Pear', 'Cola')
) AS s (Name, Snack, Drink)
ON s.Name= t.name;

关于sql - 如何在 CASE 语句中分配多个值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35914894/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com