[英]Correct Usage of IF Exists in SQL
我試圖在下面運行以下SQL語句
select FB.FundingSourceID,
FB.FiscalYearID,
(FB.FundingBudget-CA.CurrentAmount-DE.CFOApproved) as Amount from
(select
FundingSourceID,
FiscalYearID,
SUM(COALESCE(Amount,0)) as FundingBudget
from [cap].[FactFundingSourceBudget]
WHERE IsDeleted = 0
group by FundingSourceID, FiscalYearID) AS FB
LEFT JOIN (
select
FundingSourceID,
FiscalYearID,
SUM(COALESCE([Current],0)) as CurrentAmount
from [cap].[FactSampledFunding] F
WHERE F.IsDeleted = 0
group by FundingSourceID, FiscalYearID) AS CA on CA.FundingSourceID = FB.FundingSourceID and CA.FiscalYearID = FB.FiscalYearID
LEFT JOIN (
IF EXISTS (SELECT FundingSourceID, FiscalYearID, SUM(COALESCE(PF.Amount,0))AS CFOApproved FROM [cap].[FactProjectFunding] PF
INNER JOIN [cap].[DimProject] DP ON DP.ProjectID = PF.ProjectID
INNER JOIN [dbo].[WFToken] WT ON DP.MemberGUID = WT.EntityGUID
INNER JOIN [dbo].[WFWorkflowStep] WFT ON WFT.WorkflowStepGUID = WT.WorkflowStepGUID
WHERE PF.IsDeleted = 0 AND WFT.Name IN ('Cancer Center Review', 'Outpatient Center Review', 'Corporate EVP CFO Review', 'Corporate EVP Review', 'Capital Committee Review')
GROUP BY FundingSourceID, FiscalYearID)
SELECT FundingSourceID, FiscalYearID, SUM(COALESCE(PF.Amount,0))AS CFOApproved FROM [cap].[FactProjectFunding] PF
INNER JOIN [cap].[DimProject] DP ON DP.ProjectID = PF.ProjectID
INNER JOIN [dbo].[WFToken] WT ON DP.MemberGUID = WT.EntityGUID
INNER JOIN [dbo].[WFWorkflowStep] WFT ON WFT.WorkflowStepGUID = WT.WorkflowStepGUID
WHERE PF.IsDeleted = 0 AND WFT.Name IN ('Cancer Center Review', 'Outpatient Center Review', 'Corporate EVP CFO Review', 'Corporate EVP Review', 'Capital Committee Review')
GROUP BY FundingSourceID, FiscalYearID
ELSE
SELECT 0 AS [FundingSourceID], 0 as [FiscalYearID], 0 as [CFOApproved]
) AS DE on DE.FundingSourceID = FB.FundingSourceID and DE.FiscalYearID = FB.FiscalYearID
WHERE
FB.FundingSourceID != 1
我得到的錯誤是:
Msg 156, Level 15, State 1, Line 20
Incorrect syntax near the keyword 'IF'.
Msg 102, Level 15, State 1, Line 34
Incorrect syntax near ')'.
這可能是由於Exists聲明的使用不正確,有些人可以幫幫我嗎?
如上所述,您無法在查詢中使用IF
語句。 當您的子查詢產生NULL結果時,您正在尋找的是一種處理AMOUNT
計算的方法。 以下使用ISNULL
表達式來處理此問題:
SELECT
FB.FundingSourceID,
FB.FiscalYearID,
( FB.FundingBudget - ISNULL(CA.CurrentAmount, 0) - ISNULL(DE.CFOApproved, 0) ) AS Amount
FROM
(
SELECT
FundingSourceID,
FiscalYearID,
SUM(COALESCE(Amount, 0)) AS FundingBudget
FROM
[cap].[FactFundingSourceBudget]
WHERE
IsDeleted = 0
GROUP BY
FundingSourceID,
FiscalYearID
) AS FB
LEFT JOIN (
SELECT
FundingSourceID,
FiscalYearID,
SUM(COALESCE([Current], 0)) AS CurrentAmount
FROM
[cap].[FactSampledFunding] F
WHERE
F.IsDeleted = 0
GROUP BY
FundingSourceID,
FiscalYearID
) AS CA
ON CA.FundingSourceID = FB.FundingSourceID
AND CA.FiscalYearID = FB.FiscalYearID
LEFT JOIN (
SELECT
FundingSourceID,
FiscalYearID,
SUM(COALESCE(PF.Amount, 0)) AS CFOApproved
FROM
[cap].[FactProjectFunding] PF
INNER JOIN [cap].[DimProject] DP
ON DP.ProjectID = PF.ProjectID
INNER JOIN [dbo].[WFToken] WT
ON DP.MemberGUID = WT.EntityGUID
INNER JOIN [dbo].[WFWorkflowStep] WFT
ON WFT.WorkflowStepGUID = WT.WorkflowStepGUID
WHERE
PF.IsDeleted = 0
AND WFT.Name IN ( 'Cancer Center Review',
'Outpatient Center Review',
'Corporate EVP CFO Review',
'Corporate EVP Review',
'Capital Committee Review' )
GROUP BY
FundingSourceID,
FiscalYearID
) AS DE
ON DE.FundingSourceID = FB.FundingSourceID
AND DE.FiscalYearID = FB.FiscalYearID
WHERE
FB.FundingSourceID != 1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.