【问题标题】:WHEN ELSE in Case expression in SQL ServerSQL Server 中的 Case 表达式中的 WHEN ELSE
【发布时间】:2021-08-30 00:41:22
【问题描述】:

我正在我的 SQL Server 中编写 case 表达式,我想在 else 块中添加硬编码值。

我想检查 case 表达式,如果下面的 DHB 输出是 2.1ABC001 那么它应该显示 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


【解决方案1】:

我能够解决您的问题并更新查询以满足您的需求。

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

【讨论】:

    猜你喜欢
    • 2012-09-20
    • 1970-01-01
    • 1970-01-01
    • 2021-03-26
    • 2018-02-01
    • 2015-11-02
    • 1970-01-01
    • 2018-04-04
    • 1970-01-01
    相关资源
    最近更新 更多