sql-server-2008 - 如何在同一查询中引用另一列中的聚合列?

标签 sql-server-2008 t-sql subquery aggregate-functions

我有一个查询,看起来或多或少像这样:

INSERT INTO #results
SELECT Name, 
        (SELECT 
            SUM(CAST(Amount AS BIGINT)) 
         FROM Items 
         WHERE RemittingMember = a.Number 
            and RecordId = 50), 
        (SELECT SUM(CAST(Std_Amount AS BIGINT)) 
         FROM Items 
         WHERE RemittingMember = a.Number 
            AND RecordId = 10)
FROM Member a

其中 Amount 是货币(存储为 varchar,不带小数),RangledMemberItems 表和Member 表和 RecordId 指示该行的项目类型。在本例中,50 是借方,10 是贷方。

我需要从第二列中减去第一列,并将该值放在第三列中。我知道我可以这样做:

INSERT INTO #results
SELECT Name, 
            (SELECT 
                SUM(CAST(Amount AS BIGINT)) 
             FROM Items 
             WHERE RemittingMember = a.Number 
                and RecordId = 50), 
            (SELECT SUM(CAST(Std_Amount AS BIGINT)) 
             FROM Items 
             WHERE RemittingMember = a.Number 
                AND RecordId = 10),
             (SELECT 
                SUM(CAST(Amount AS BIGINT)) 
             FROM Items 
             WHERE RemittingMember = a.Number 
                and RecordId = 50) - (SELECT SUM(CAST(Std_Amount AS BIGINT)) 
             FROM Items 
             WHERE RemittingMember = a.Number 
                AND RecordId = 10)    
FROM Member a

但是,如果需要进行更改,这相当难以阅读并且更改起来很麻烦。我也知道我可以使用局部变量来做到这一点,但这是一个报告,其中 a.Number 将发生变化,这将涉及我想避免的迭代。

我还需要检查第三列的符号以将值放入第四列。

有什么巧妙的方法可以实现这一目标吗?

最佳答案

您可以使用 CTE,如下所示:

;WITH intermediate_results (name, debit, credit)
AS (
SELECT
    Name
    AS name, 

    (SELECT 
        SUM(CAST(Amount AS BIGINT)) 
     FROM Items 
     WHERE RemittingMember = a.Number 
        and RecordId = 50)
    AS debit, 

    (SELECT SUM(CAST(Std_Amount AS BIGINT)) 
     FROM Items 
     WHERE RemittingMember = a.Number 
        AND RecordId = 10)
    AS credit

FROM Member a
)

INSERT INTO #results
SELECT name, debit, credit, debit - credit, SIGN(debit - credit)
  FROM intermediate_results

关于sql-server-2008 - 如何在同一查询中引用另一列中的聚合列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17570897/

相关文章:

sql - 是否有可能在同一触发器运行中混合更新和插入?

sql-server - SQL 将顺序时间序列集折叠在一起

mysql - SUM 结果的子查询 AVG

mysql - 可以选择但不能删除

SQL Server 内连接和子查询

mysql - 使用 SSMS 将数据从 MySql 传输到 SQL Server

sql - 与所有列进行比较

java - com.microsoft.sqlserver.jdbc.SQLServerException : Incorrect syntax near '@P0'

sql-server - 避免在存储过程中重复函数?

sql - SUM 函数对每个总和带有 WHERE 子句?