SQL 服务器中的 Case 表达式中的 WHEN ELSE
WHEN ELSE in Case expression in SQL Server
我正在我的 SQL 服务器中编写 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'
。
非常感谢任何帮助!!
我能够解决您的问题并更新查询以满足您的需要。
SELECT DISTINCT userid,
CASE WHEN DHB in ('2.1','ABC001') THEN 'ABC Hospital'
ELSE DHB END
FROM
(
SELECT
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'
) as aa
我正在我的 SQL 服务器中编写 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'
。
非常感谢任何帮助!!
我能够解决您的问题并更新查询以满足您的需要。
SELECT DISTINCT userid,
CASE WHEN DHB in ('2.1','ABC001') THEN 'ABC Hospital'
ELSE DHB END
FROM
(
SELECT
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'
) as aa