希望这是一个快速的:
我需要生成一行,其中包含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
这还够继续吗?
再次感谢
克雷格
答案 0 :(得分:1)
看起来问题是你在这张桌子上做了'自我加入',这是合法的重复结果 即返回(t1,t2)和(t2,t1)。
是否有索引列(即每行具有唯一值的索引列)?如果是这样,您可以添加:
and t1.id < t2.id
加入条件,以消除重复