CASE WHEN逻辑
CASE WHEN logic
我正在尝试比较两个单独的 table 和 return 中的数据,如果两个 table 中的数据不匹配,则 "Mismatch" 代码。我的问题是,在 SO_SalesOrderHistoryHeader
table 中,SalesPersonNo
是 0,而 DailySales_BB.dbo.Exceptions
table 中的匹配响应是 DestinationTerritory
,即 50。我的逻辑是说如果 SalesPersonNo
等于 0 那么 return 50 来匹配 DestinationTerritory
。当我使用这个逻辑(见下面的代码)时,报告生成所有 NULLS。
看似简单的逻辑,却难倒了我??任何帮助将不胜感激!
代码:
SELECT
SOH.SalesOrderNo ,
'Territory Mismatch - Exception' AS [ReasonForError]
FROM
ASHEVMSAGE100.MAS_PHE.dbo.SO_SalesOrderHistoryHeader SOH,
ASHEVMSQL.DailySales_BB.dbo.Exceptions EX
WHERE
(CASE
WHEN CAST(SOH.SalespersonNo AS INT) = '0'
THEN '50'
ELSE CAST(SOH.SalespersonNo AS INT)
END) <>
CASE WHEN (...multiple cases...)
THEN EX.DestinationTerritory
你的案例逻辑没有问题。试试这个:
SELECT
SOH.SalesOrderNo ,
'Territory Mismatch - Exception' AS [ReasonForError]
FROM
ASHEVMSAGE100.MAS_PHE.dbo.SO_SalesOrderHistoryHeader SOH,
ASHEVMSQL.DailySales_BB.dbo.Exceptions EX
WHERE
CASE
WHEN CAST(SOH.SalespersonNo AS INT) = 0
THEN 50
ELSE CAST(SOH.SalespersonNo AS INT)
END <>
CASE WHEN (...multiple cases...) --make sure all cases result in an INT
THEN CAST(EX.DestinationTerritory AS INT)
我正在尝试比较两个单独的 table 和 return 中的数据,如果两个 table 中的数据不匹配,则 "Mismatch" 代码。我的问题是,在 SO_SalesOrderHistoryHeader
table 中,SalesPersonNo
是 0,而 DailySales_BB.dbo.Exceptions
table 中的匹配响应是 DestinationTerritory
,即 50。我的逻辑是说如果 SalesPersonNo
等于 0 那么 return 50 来匹配 DestinationTerritory
。当我使用这个逻辑(见下面的代码)时,报告生成所有 NULLS。
看似简单的逻辑,却难倒了我??任何帮助将不胜感激!
代码:
SELECT
SOH.SalesOrderNo ,
'Territory Mismatch - Exception' AS [ReasonForError]
FROM
ASHEVMSAGE100.MAS_PHE.dbo.SO_SalesOrderHistoryHeader SOH,
ASHEVMSQL.DailySales_BB.dbo.Exceptions EX
WHERE
(CASE
WHEN CAST(SOH.SalespersonNo AS INT) = '0'
THEN '50'
ELSE CAST(SOH.SalespersonNo AS INT)
END) <>
CASE WHEN (...multiple cases...)
THEN EX.DestinationTerritory
你的案例逻辑没有问题。试试这个:
SELECT
SOH.SalesOrderNo ,
'Territory Mismatch - Exception' AS [ReasonForError]
FROM
ASHEVMSAGE100.MAS_PHE.dbo.SO_SalesOrderHistoryHeader SOH,
ASHEVMSQL.DailySales_BB.dbo.Exceptions EX
WHERE
CASE
WHEN CAST(SOH.SalespersonNo AS INT) = 0
THEN 50
ELSE CAST(SOH.SalespersonNo AS INT)
END <>
CASE WHEN (...multiple cases...) --make sure all cases result in an INT
THEN CAST(EX.DestinationTerritory AS INT)