如何在 IF 条件连接查询中使用大小写语法?



如何在 IF 条件连接查询中使用大小写语法?

如何在单个 case else 语句中拥有这两个选择查询块?

declare @provid int
declare @stageprovid int
-- If this Syntax satisfies, then don't execute the next syntax.
-- If this syntax does not satisfy, then execute the next block.
SELECT @provid = prv.ID 
FROM StagingProvider StagePrv
JOIN Providers prv 
ON StagePrv.ClientID = prv.ClientID 
AND  prv.ExternalProviderID = StagePrv.[Provider_ID]
WHERE StagePrv.ID = @stageprovid;  
-- This block of syntax executes only if the first block did not satisfy.    
SELECT @provid = prv.ID 
FROM StagingProvider StagePrv   
JOIN Providers prv
ON StagePrv.ClientID = StagePrv.ClientID 
AND prv.NPI = StagePrv.NPI
WHERE StagePrv.ID = @stageprovid;  

我很确定我终于明白你想问什么了,答案是否定的,你不能按照你的想法使用 CASE 表达式来控制 JOIN 条件。

如果我理解正确的话,您可以做您想做的事的方法是在 JOIN 条件中使用 OR,并使用带有 ORDER BY 的 TOP 1 将结果优先级设置为正确的结果:

SELECT TOP 1 @provid = prv.ID 
FROM StagingProvider StagePrv
JOIN Providers prv 
ON StagePrv.ClientID = prv.ClientID 
AND (
prv.ExternalProviderID = StagePrv.[Provider_ID]
OR prv.NPI = StagePrv.NPI
)
WHERE StagePrv.ID = @stageprovid
ORDER BY CASE
WHEN prv.ExternalProviderID = StagePrv.[Provider_ID] THEN 0
ELSE 1
END;  

另一种可能更好的方法是使用 UNION,但我认为这可能更接近您的要求。

我正在读到这篇文章,如果你能在第一个连接条件下找到一个 ID,你就很好。如果不能,则需要继续执行第二个连接条件。如果是这种情况,您可以尝试将两次加入您的桌子。在这种情况下,如果第一个联接上没有 ID,则在第二个联接上选取 ID。

SELECT @provid = COALESCE(first.ID, second.ID) 
FROM StagingProvider StagePrv
LEFT JOIN Providers prv AS first
ON StagePrv.ClientID = prv.ClientID 
AND  prv.ExternalProviderID = StagePrv.[Provider_ID]  
LEFT JOIN Providers prv AS second
ON StagePrv.ClientID = StagePrv.ClientID 
AND prv.NPI = StagePrv.NPI
WHERE StagePrv.ID = @stageprovid;  

请注意,如果您非常想这样做,这可以编写为 CASE:

SELECT @provid = CASE WHEN first.ID IS NOT NULL 
THEN first.ID
ELSE second.ID 
END
FROM StagingProvider StagePrv
LEFT JOIN Providers prv AS first
ON StagePrv.ClientID = prv.ClientID 
AND  prv.ExternalProviderID = StagePrv.[Provider_ID]  
LEFT JOIN Providers prv AS second
ON StagePrv.ClientID = StagePrv.ClientID 
AND prv.NPI = StagePrv.NPI
WHERE StagePrv.ID = @stageprovid;  

最新更新