【发布时间】:2021-04-25 04:28:47
【问题描述】:
我有一个 SQL 查询,我需要用同一张表中的另一个东西替换某些东西。我不知道如何解释它,但我会尝试提供我现在对 SQL 代码的一般想法:
SELECT
ItemCode,
CASE
WHEN Name = 'Alpha' THEN (SELECT Name FROM stuff WHERE Name = 'Gama')
ELSE Name
END
FROM <a bunch of joined tables>
样本数据:
ItemCode Name Location
Itm-1 Alpha Loc-Alpha
Itm-2 Bravo Loc-Bavo
Itm-4 Gama Loc-Gama
期望的结果:
ItemCode Name Location
Itm-1 Gama Loc-Gama
Itm-2 Bravo Loc-Bavo
Itm-4 Gama Loc-Gama
我希望这是有道理的,因为我已经严重压缩了整个代码。为了使事情更加复杂,我会多次使用 select 子查询。基本上我试图避免使用子查询,我相信这会由于多个选择语句而延长执行时间。如果有人能提供任何建议,我将不胜感激。
谢谢!
【问题讨论】:
-
SELECT Name FROM stuff WHERE Name = 'Gama'将只返回Gama,如果存在的话。符合预期? -
样本数据和期望的结果将阐明您想要做什么。您正在使用的数据库的标签可以更容易地回答问题。
-
抱歉,因为这是我第一次作为主动询问者。让我弄清楚如何添加示例数据。
-
@GordonLinoff 我添加了示例数据和所需的结果。我希望这有帮助。如果我需要添加任何其他内容,请告诉我。
-
为什么要关注“子查询”?这听起来像是您缺乏经验。但是您发布的查询至少完成了您想要的一半 - 对吗?所以唯一的另一个问题是位置列中的替换。正确的?也许您通过将“alpha”替换为“gama”而过度简化和过于复杂的事情,而“gama”已经存在于您的实际数据和期望的结果中。您可以使用 STUFF() 替换字符串 - 一个很好的起点。
标签: sql sql-server replace subquery