【发布时间】:2013-07-08 09:33:03
【问题描述】:
我的查询看起来或多或少像这样:
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,没有小数点),RemittingMember 是Items 表和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 将发生变化,这将涉及我想要避免的迭代。
我还需要检查第三列的符号以将值放入第四列。
有没有聪明的方法来实现这一点?
【问题讨论】:
标签: sql-server-2008 tsql subquery aggregate-functions