-3
我有一個針對SUM方程的具有多個別名的查詢。來自別名的SQL方程
現在我需要在更大的公式中使用這些別名,但顯然不能在同一個查詢中使用別名。在一個案例中,我總共需要將大約7個別名相加,再將兩個別名相加在一起。有沒有簡單的方法來做到這一點?使用SQL Server
例如 -
ISNULL((SELECT SUM(Addendums)
FROM v_Addendums
WHERE Job_ID = JM.Job_ID
AND (JC.FundingType_ID <> 1 OR JC.FundingType_ID IS NULL)
AND jobPhase_CompletedDate <= @dt1
AND (Addendum_Date between @dt1-31 and @dt1)),0) AS Earn30,
ISNULL((SELECT SUM(JM1.Draw_Amount)
FROM DrawSchedule AS JM1 INNER JOIN
JobContracts AS JC1 ON JM1.Job_ID = JC1.Job_ID LEFT OUTER JOIN
v_JobPhase ON JC1.Job_ID = v_JobPhase.Job_ID AND
JM1.JobPhase_ID = v_JobPhase.PhaseType_ID
WHERE (v_JobPhase.Completed IS NOT NULL)
AND (JC.FundingType_ID <> 1 OR JC.FundingType_ID IS NULL)
AND (v_JobPhase.Completed BETWEEN @dt1 - 61 AND @dt1-31)
AND (JM1.Job_ID = JM.Job_ID)),0) +
ISNULL((SELECT SUM(Addendums)
FROM v_Addendums
WHERE Job_ID = JM.Job_ID
AND (JC.FundingType_ID <> 1 OR JC.FundingType_ID IS NULL)
AND jobPhase_CompletedDate <= @dt1
AND (Addendum_Date between @dt1-61 and @dt1-31)),0) AS Earn60
說我需要添加Earn30 + Earn60 ..然後減去另一個類似的別名。
您需要發佈您的代碼以便能夠直接評論您的解決方案。但是,有些方法會取決於您使用的RDBMS,因此您應該對其進行標記(例如,sql-server,oracle等)。很可能您希望在公用表表達式中創建所有總和[cte]或派生表,然後引用你的最後等式的別名列 – Matt
@Matt謝謝,我將你的建議添加到我的問題。 –
在公共表表達式[CTE]上閱讀起來,它可能會比起派生表更容易理解,因爲您可以更輕鬆地分離您的邏輯。也沒有看到你所有的查詢,我只能說第一眼看上去有一些其他寫這個查詢的方法,你可能會從中獲益。也不要使事情複雜化,但如果你真的只處理1行/一組值,你也可以將這些部分分配給變量。 – Matt