根据案例查询不同join/update

Different join/update based on case query

我正在尝试使用以下代码 运行 不同的 join 查询,基于 CASE 语句。

所以如果 customer CLI 等于 84422881 我希望它根据 [Extenstion] 字段加入并且如果不满足条件即 ELSE 那么加入 [Customer CLI]

use VoiceflexBilling

CASE WHEN [dbo].[MARU15_OWH07579_Calls].[CustomerCLI] = '84422881' THEN

UPDATE [dbo].[MARU15_OWH07579_Calls] 
SET [dbo].[MARU15_OWH07579_Calls].[CustomerLookup] = CLIMapping.[customer id] 
FROM [BillingReferenceData].[dbo].[CLIMapping] 
INNER JOIN [VoiceflexBilling].[dbo].[MARU15_OWH07579_Calls] 
on [VoiceflexBilling].[dbo].[MARU15_OWH07579_Calls].[Extension] = [BillingReferenceData].[dbo].[CLIMapping].[CLI]

ELSE

UPDATE [dbo].[MARU15_OWH07579_Calls] 
SET [dbo].[MARU15_OWH07579_Calls].[CustomerLookup] = CLIMapping.[customer id] 
FROM [BillingReferenceData].[dbo].[CLIMapping] 
INNER JOIN [VoiceflexBilling].[dbo].[MARU15_OWH07579_Calls] 
on [VoiceflexBilling].[dbo].[MARU15_OWH07579_Calls].[CustomerCLI] = [BillingReferenceData].[dbo].[CLIMapping].[CLI]

END

目前我收到以下错误:

Msg 156, Level 15, State 1, Line 3 Incorrect syntax near the keyword 'CASE'. Msg 156, Level 15, State 1, Line 11 Incorrect syntax near the keyword 'ELSE'. Msg 102, Level 15, State 1, Line 19 Incorrect syntax near 'END'.

任何人都可以帮助正确的语法吗?

谢谢,

您可以在 join condition:

中使用 case 语句
UPDATE [dbo].[MARU15_OWH07579_Calls] 
SET [dbo].[MARU15_OWH07579_Calls].[CustomerLookup] = CLIMapping.[customer id] 
FROM [BillingReferenceData].[dbo].[CLIMapping] 
INNER JOIN [VoiceflexBilling].[dbo].[MARU15_OWH07579_Calls] 
ON [BillingReferenceData].[dbo].[CLIMapping].[CLI] = 
 CASE WHEN [dbo].[MARU15_OWH07579_Calls].[CustomerCLI] = '84422881' 
                 THEN [VoiceflexBilling].[dbo].[MARU15_OWH07579_Calls].[Extension]
      ELSE [VoiceflexBilling].[dbo].[MARU15_OWH07579_Calls].[CustomerCLI] 
 END

对您的查询的一些评论。首先,case 是一个 表达式 ,不是控制流。所以,它属于一个查询。其次,您可以为此查询只使用 "regular" 逻辑。第三,table 别名会使查询更易于编写和阅读:

UPDATE c 
SET c.[CustomerLookup] = CLIMapping.[customer id] 
FROM [VoiceflexBilling].[dbo].[MARU15_OWH07579_Calls] cm
     [BillingReferenceData].[dbo].[CLIMapping] c INNER JOIN
     on (c.[CustomerCLI] = '84422881' AND c.[Extension] = cm.[CLI]) or
        (c.[CustomerCLI] <> '84422881' AND c.[CustomerCLI] = cm.[CLI])

案例必须出现在query.for你的场景中我建议你编写你的代码如下:(你需要实现循环遍历所有记录,在这种情况下你需要修改这个码一点)

DECLARE @p varchar(100)
SET @p=(SELECT TOP 1 [dbo].[MARU15_OWH07579_Calls].[CustomerCLI] FROM [dbo].[MARU15_OWH07579_Calls])
IF @p = '84422881'
   UPDATE [dbo].[MARU15_OWH07579_Calls] 
   SET [dbo].[MARU15_OWH07579_Calls].[CustomerLookup] = CLIMapping.[customer id] 
   FROM [BillingReferenceData].[dbo].[CLIMapping] 
   INNER JOIN [VoiceflexBilling].[dbo].[MARU15_OWH07579_Calls] 
   on [VoiceflexBilling].[dbo].[MARU15_OWH07579_Calls].[Extension] =[BillingReferenceData].[dbo].[CLIMapping].[CLI]

ELSE
   UPDATE [dbo].[MARU15_OWH07579_Calls] 
   SET [dbo].[MARU15_OWH07579_Calls].[CustomerLookup] = CLIMapping.[customer id] 
   FROM [BillingReferenceData].[dbo].[CLIMapping] 
   INNER JOIN [VoiceflexBilling].[dbo].[MARU15_OWH07579_Calls] 
   on [VoiceflexBilling].[dbo].[MARU15_OWH07579_Calls].[CustomerCLI] = [BillingReferenceData].[dbo].[CLIMapping].[CLI]