【发布时间】:2021-08-30 00:41:22
【问题描述】:
我正在我的 SQL Server 中编写 case 表达式,我想在 else 块中添加硬编码值。
我想检查 case 表达式,如果下面的 DHB 输出是 2.1 和 ABC001 那么它应该显示 ABC Hospital 的硬编码值。
SELECT DISTINCT
userid,
CASE
WHEN CHARINDEX('-', e.name) > 0
THEN Ltrim(Rtrim(substring(e.name,0, charIndex('-', e.name))))
ELSE e.name
END as DHB
FROM
[Table1].[dbo].Event ae
JOIN
[Portal].[dbo].cUser cu ON cu.name = ae.userID
JOIN
[Portal].[dbo].UAttribute ua ON ua.cUser = cu.uniqueId
JOIN
[Portal].[dbo].[EIdentifier] ei ON ei.cUser = cu.uniqueId
JOIN
[Portal].[dbo].[EIdentifierType] e ON e.uniqueId = ei.externalIdentifierType
WHERE
(e.name LIKE '%ABC001%' OR e.name LIKE '2.1')
AND userId = 'Al5'
电流输出
userid DHB
Al5 2.1
Al5 ABC001
Bl5 3.1
Bl5 CDE001
预期输出
userid DHB
Al5 ABC Hospital
Bl5 EFG Hospital
我在下面尝试过这样的事情
CASE WHEN Ltrim(Rtrim(substring(e.name,0, charIndex('-', e.name)))) = 'ABC001' THEN 'ABC Hospital'
WHEN e.name = '2.1' THEN 'ABC Hospital'
ELSE e.name 'ABC Hospital'
END as DHB
但它不允许我输入ELSE e.name 'ABC Hospital'。
非常感谢任何帮助!
【问题讨论】:
-
您说您希望硬编码值“ABC Hospital”,问题是您从不硬编码值“ABC Hospital”。从那里开始。
-
要获得预期的输出删除或“2.1”的条件 -
where (e.name like '%ABC001%') -
@Fabio,我需要检查
where子句中的两个条件。 -
@AnthonyPegram,你能建议我解决这个问题吗?
-
只需将此行
ELSE e.name 'ABC Hospital'更改为ELSE 'ABC Hospital'
标签: sql sql-server tsql case