MS SQL Studio 2008-使用SUM选择子查询
使用SUM的此子查询存在问题。查询将汇总特定日期范围内多条记录的利润列。我根据记录中所附的账号对利润总额进行分组。有了一个帐号,它就可以正常工作了:MS SQL Studio 2008-使用SUM选择子查询,sql,sql-server-2008-r2,Sql,Sql Server 2008 R2,使用SUM的此子查询存在问题。查询将汇总特定日期范围内多条记录的利润列。我根据记录中所附的账号对利润总额进行分组。有了一个帐号,它就可以正常工作了: select [ACCOUNT ID], ( select SUM(PROFIT) from [Transaction Table] where [ACCOUNT ID] in ('1001') and [ACTIVITY DATE] in ('5/31/2012') ) as 'Ma
select
[ACCOUNT ID],
(
select SUM(PROFIT)
from [Transaction Table]
where [ACCOUNT ID] in ('1001')
and [ACTIVITY DATE] in ('5/31/2012')
) as 'May Profit'
from
[Transaction Table]
where
[ACCOUNT ID] in ('1001')
group by
[ACCOUNT ID]
给出正确的结果:
| ACCOUNT ID | May Profit |
---------------------------
| 1001 | $61.97 |
| ACCOUNT ID | May Profit |
---------------------------
| 1001 | $127.34 |
| 2001 | $127.34 |
问题来自多个帐号:
select
[ACCOUNT ID],
(
select SUM(PROFIT)
from [Transaction Table]
where [ACCOUNT ID] in ('1001','2001')
and [ACTIVITY DATE] in ('5/31/2012')
) as 'May Profit'
from
[Transaction Table]
where
[ACCOUNT ID] in ('1001','2001')
group by
[ACCOUNT ID]
给出了不正确的结果:
| ACCOUNT ID | May Profit |
---------------------------
| 1001 | $61.97 |
| ACCOUNT ID | May Profit |
---------------------------
| 1001 | $127.34 |
| 2001 | $127.34 |
每个记录上的两个账户的“五月利润”合计。我需要每个帐号的个人利润总额
有什么想法吗?提前谢谢 您不需要使用子查询
select
[ACCOUNT ID],
SUM(PROFIT)
from [Transaction Table]
where [ACCOUNT ID] in ('1001','2001') and [ACTIVITY DATE] in ('5/31/2012')
group by [ACCOUNT ID]
您的查询只计算了两个帐户的总和,并在每一行显示它
更新: 实际上,对于多次求和,我会这样做
select
[ACCOUNT ID],
SUM(case when [ACTIVITY DATE] in ('5/31/2012') then PROFIT else 0 end) as 'May Profit',
SUM(case when [ACTIVITY DATE] in ('4/31/2012') then PROFIT else 0 end) as 'April Profit'
from [Transaction Table]
where [ACCOUNT ID] in ('1001','2001') and
group by [ACCOUNT ID]
您不需要使用子查询,但以下是两种方法: 第一种方法是使用您的查询(不推荐)-注意帐户Id=T。帐户Id:
select
[ACCOUNT ID],
(
select SUM(PROFIT)
from [Transaction Table]
where [ACCOUNT ID] = T.[ACCOUNT ID]
and [ACTIVITY DATE] in ('5/31/2012')
) as 'May Profit'
from
[Transaction Table] T
where
[ACCOUNT ID] in ('1001','2001')
group by
[ACCOUNT ID]
更好的方法:
select
[ACCOUNT ID],
SUM(PROFIT)
from [Transaction Table]
where [ACCOUNT ID] in ('1001','2001') and [ACTIVITY DATE] in ('5/31/2012')
group by [ACCOUNT ID]
你最好的杰森!我没有完全回答我原来的问题。你更清晰的答案对我来说不起作用。我需要在一张电子表格上列出多个月的利润。因此,我使用多个子选择来提取“五月利润”、“六月利润”、“七月利润”等。您能向我解释一下为什么添加
[ACCOUNT ID]=t.[ACCOUNT ID]
会产生差异吗?因为您最初的查询来自[Transaction Table]在子查询之外,即帐户ID所在的位置。因此,您正在将该表的结果中的帐户ID映射到子查询where子句,这使它能够仅查询行中特定ID的结果。您的帐户ID是一个救命稻草!我现在有10个子查询,都是查询不同日期范围的利润栏。非常感谢!这个答案也完全正确。如果您需要在同一个查询中有多个子选择,请参阅Jason Heine的第一个答案。@tcshain为多个子选择添加了建议的语法:)我真的不喜欢子选择,而且它们比只使用聚合进行一次选择要慢如果我正确理解这些聚合,那么您已经在利润时执行了SUM
满足[活动日期]
的要求。您能解释一下else 0 end
部分在做什么吗?sum是聚合函数,对于每一行,如果('5/31/2012')
中的[ACTIVITY DATE],则得到一个等于利润的值,否则为0,然后对值求和