Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 累计总数翻了一番_Sql_Sql Server 2008_Sum - Fatal编程技术网

Sql 累计总数翻了一番

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

希望这是一个快速的例子:

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

然而,当我简单地选择值时,我得到了正确的数量,但是当我对值应用SUM()时,我得到了加倍的数量

表结构:

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。您可以简化为类似于此问题的答案: