累计总数翻倍

时间:2013-07-22 14:46:09

标签: sql sql-server-2008 sum

希望这是一个快速的:

我需要生成一行,其中包含ACCOUNT和MONTH相同的所有值的总和,以便比较两个系统之间的值。

但是,当我只选择值时,我会得到正确的数量,但是当我对值应用SUM()时,我会加倍。

表格结构:

ACCOUNT    MONTH    PC     VALUE
12110      201305   B1000  100
12110      201305   B1000  50

返回正确的值:

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

但是,当我应用汇总时:

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    VALUE
12110      201305   300

任何人都可以请求帮助,因为我一直盯着这个看了一个多小时,并且无法解决这个应该是一个小问题的问题吗?

感谢。

克雷格

*编辑*

好的,全表结构:

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个)。 其他行具有不同的MONTH(第3行)或不同的PC。

我正在做的是在ACCOUNT,PC和MONTH相同的地方(上面的第1行和第2行)汇总VALUES。 其他列(条形值VALUE)始终相同。

这些行的总数应为1,300,000.00。

当我对它们进行求和时(如第一个例子所示),它返回2,600,000.00

这还够继续吗?

再次感谢

克雷格

1 个答案:

答案 0 :(得分:1)

看起来问题是你在这张桌子上做了'自我加入',这是合法的重复结果 即返回(t1,t2)和(t2,t1)。

是否有索引列(即每行具有唯一值的索引列)?如果是这样,您可以添加:

and t1.id < t2.id

加入条件,以消除重复