根据案例查询不同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]
我正在尝试使用以下代码 运行 不同的 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]