Sql 累计总数翻了一番
希望这是一个快速的例子: 我需要生成一行,其中包含帐户和月份相同的所有值的总和,以便比较两个系统之间的值 然而,当我简单地选择值时,我得到了正确的数量,但是当我对值应用SUM()时,我得到了加倍的数量 表结构:Sql 累计总数翻了一番,sql,sql-server-2008,sum,Sql,Sql Server 2008,Sum,希望这是一个快速的例子: 我需要生成一行,其中包含帐户和月份相同的所有值的总和,以便比较两个系统之间的值 然而,当我简单地选择值时,我得到了正确的数量,但是当我对值应用SUM()时,我得到了加倍的数量 表结构: ACCOUNT MONTH PC VALUE 12110 201305 B1000 100 12110 201305 B1000 50 CATEGORY DATASRC CURRENCY MONTH VALUE
ACCOUNT MONTH PC VALUE
12110 201305 B1000 100
12110 201305 B1000 50
CATEGORY DATASRC CURRENCY MONTH VALUE ACCOUNT PC FLOW
WF PP LC 201305 2588651.6800000000 12110 B1090 MV
WF PP LC 201305 -1288651.6800000000 12110 B1090 MV
WF PP LC 201306 1000000.0000000000 12110 B1090 MV
WF PP LC 201305 -500000.0000000000 12110 B1500 MV
通过以下方式返回正确的值:
select
t1.[ACCOUNT] as [ACCOUNT],
t1.[MONTH] as [MONTH],
t1.[PC] as [PC],
t2.[VALUE] as [VALUE]
from Table1 t1
inner join Table2 t2
on t1.ACCOUNT = t2.ACCOUNT
and t1.MONTH = t2.MONTH
and t1.[PC] = t2.[PC]
group by t1.ACCOUNT, t1.MONTH, t1.PC, t2.VALUE
这将返回:
ACCOUNT MONTH PC VALUE
12110 201305 B1000 150
ACCOUNT MONTH VALUE
12110 201305 300
但是,当我应用汇总时:
select
t1.[ACCOUNT] as [ACCOUNT],
t1.[MONTH] as [MONTH],
t1.[PC] as [PC],
sum(t2.[VALUE]) as [VALUE]
from Table1 t1
inner join Table2 t2
on t1.ACCOUNT = t2.ACCOUNT
and t1.MONTH = t2.MONTH
and t1.[PC] = t2.[PC]
group by t1.ACCOUNT, t1.MONTH, t1.PC
这将返回:
ACCOUNT MONTH PC VALUE
12110 201305 B1000 150
ACCOUNT MONTH VALUE
12110 201305 300
有人能帮我吗?我已经盯着这个问题看了一个多小时了,不能对这个小问题掉以轻心
谢谢
克雷格
*编辑*
好的,全表结构:
ACCOUNT MONTH PC VALUE
12110 201305 B1000 100
12110 201305 B1000 50
CATEGORY DATASRC CURRENCY MONTH VALUE ACCOUNT PC FLOW
WF PP LC 201305 2588651.6800000000 12110 B1090 MV
WF PP LC 201305 -1288651.6800000000 12110 B1090 MV
WF PP LC 201306 1000000.0000000000 12110 B1090 MV
WF PP LC 201305 -500000.0000000000 12110 B1500 MV
在上面的示例中,您可以看到我需要的连接的2个值(顶部2)。
其他行具有不同的月份(第3行)或不同的PC
我要做的是在账户、PC和月份相同的地方求和(上面的第1行和第2行)。
其他列(条形图值)始终相同
这些行的总数应为1300000.00
当我对它们求和时(如第一个示例所示),它返回2600000.00
这足够继续下去吗
再次感谢
Craig问题似乎在于您正在该表上执行“自联接”,这是合法地复制结果 i、 e.返回(t1,t2)和(t2,t1) 是否有索引列(即每行具有唯一值的索引列)?如果是,您可以添加:
and t1.id < t2.id
和t1.id
根据您的连接条件,要消除重复项您能否向我们显示两个表中的数据?对我来说,第一个查询不会在列值中返回
150
。我必须同意@Parado。如果您向我们展示两个表模式以及每个表模式中的数据,我们将得到一个更好的想法。我不得不将它改为t1.id=t2.id,但现在它似乎起作用了。嗯,我不确定它是否正确。如果t1和t2具有相同的ID,那么它实际上是同一行。。。因此,联接没有做任何有用的事情,您可以只在表上执行一个select/sum/group by。您可以简化为类似于此问题的答案: