sql-server - 在 SQL 查询中减去两列

标签 sql-server

我一直在尝试减去 sql server 中的两列以形成第三列。以下是我的查询

select  AD.Id, Sum(APS.Amount) AS TotalDue,
isnull((select sum(Amount) from Activation where InvoiceId in (select InvoiceId from Invoices where AgreementId = AD.Id)),0)
As AllocatedToDate 
from AdvantageDetails AD 
inner join AllPaymentsSubstantial APS
on APS.AgreementId=AD.Id
where AD.OrganizationId=30
group by AD.Id

我尝试过如下,但它不起作用。 :

select  AD.Id, Sum(APS.Amount) AS TotalDue,
isnull((select sum(Amount) from Activation where InvoiceId in (select InvoiceId from Invoices where AgreementId = AD.Id)),0)
As AllocatedToDate , (TotalDue-AllocatedToDate) as NewColumn
from AdvantageDetails AD 
inner join AllPaymentsSubstantial APS
on APS.AgreementId=AD.Id
where AD.OrganizationId=30
group by AD.Id

最后我尝试使用 CTE,效果很好。但我想在不创建 CTE 的情况下做到这一点。是否有任何其他方法可以执行相同的功能。我不想使用 CTE,因为预测有 可以是将来计算的其他列。

with CTE as(select  AD.Id, Sum(APS.Amount) AS TotalDue,
isnull((select sum(Amount) from Activation where InvoiceId in (select InvoiceId from Invoices where AgreementId = AD.Id)),0)
As AllocatedToDate , (TotalDue-AllocatedToDate) as NewColumn
from AdvantageDetails AD 
inner join AllPaymentsSubstantial APS
on APS.AgreementId=AD.Id
where AD.OrganizationId=30
group by AD.Id) select * , (CTE.TotalDue-CTE.AllocatedToDate)As Newcolumn from CTE

最佳答案

您无需使用 CTE,即可通过重复构成 AlownedToDate 的整个公式来完成此操作。

您不能在 SELECT 列表中使用列的别名,因此您不能执行以下操作:

SELECT {some calculation} AS ColumnA, (ColumnA - ColumnB) AS ColumnC

如果您不想使用 CTE 或派生表,则必须执行以下操作:

SELECT {some calculation} AS ColumnA, ({some calculation} - ColumnB) AS ColumnC

顺便说一句,我无法想象为什么 future 添加列的可能性是不使用 CTE 的原因。对我来说,这听起来像是使用 CTE 的一个原因,因为您只需在代码中的一个位置进行更改,而不必在同一查询中的不同位置重复相同的代码。

关于sql-server - 在 SQL 查询中减去两列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37028278/

相关文章:

sql - 对另一个数据库的 View

SQL查询来比较彼此之间的行子集

c# - 数据库宕机时如何防止 "503 Service Unavailable"

sql - 如何使用SQL Server通过子节点中的值查找所有父节点

sql - 如果日期字段是 varchar - SQL Server 2016,有没有办法从表中获取一周前的数据

sql-server - 联合所有错误必须具有相同数量的表达式

sql-server - VSS 中的还原操作失败返回 VSS_E_OBJECT_NOT_FOUND

sql-server - 如何在 SQL Server 中编写任意数量的参数函数

c# - 什么时候是 sqlchars 什么时候是 sqlstring?

sql - 高效地根据 "filter"表从一张表中获取结果