-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