Sql 如何在IF条件连接查询中使用Case语法?
如何在IF条件连接查询中使用Case语法 如何在单个case-else语句中包含这两个select查询块Sql 如何在IF条件连接查询中使用Case语法?,sql,sql-server,tsql,Sql,Sql Server,Tsql,如何在IF条件连接查询中使用Case语法 如何在单个case-else语句中包含这两个select查询块 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
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表达式来控制连接条件 如果我正确理解了您的意思,那么您可以按照自己的意愿执行操作,方法是在联接条件中使用OR,并使用TOP 1和ORDER BY将结果按正确的顺序排列优先级:
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;
另一种可能更好的方法是使用联合,但我认为这可能更接近您的要求。我正在阅读这篇文章,如果您可以在第一个连接条件下找到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;
请注意,如果您非常想这样做,可以将其作为案例编写:
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;
这个问题不是很清楚。我们需要了解该表的外观,以及您希望传递给provid和stageprovid的参数。@MEdwin,很抱歉。我做了一些改变。请检查您是否熟悉if语法@GordonLinoff,如果你愿意的话。什么样的可测量质量能决定第一块是否满足要求?