2013-03-12 68 views
-2

TBL1SQL:3代表与从2个表和总和选择列上一列

fld1 fld12 fld3 fld4 

TBL2

fld5 fld6 fld7 

TBL3

fld8 fld9 fld10 fld11 fld12 fld13 

查询:

select fld8, fld11, fld12, sum(fld3), fld4 
from tbl1, tbl2, tbl3 
where fld1=fld5 and fld2=fld6 and fld7=fld8 

查询未运行。我使用了连接,但总和不起作用。使用fld3查询可以使用,但不能使用sum(fld3)。请帮忙。

+0

什么是您预期的结果? – 2013-03-12 20:57:32

+0

[踢坏的习惯:使用旧式JOIN](http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick-using-old-style-joins。 aspx) - 旧式*逗号分隔的表*样式列表已停止使用ANSI - ** 92 ** SQL标准(** 20年前**!) – 2013-03-12 21:22:19

回答

0

一些数据库引擎要求您指定一组使用集合时(求和,计数平均等)

select fld8, fld11, fld12, sum(fld3), fld4 
from tbl1, tbl2, tbl3 
where fld1=fld5 and fld2=fld6 and fld7=fld8 
GROUP BY fld8, fld11, fld12, fld4 

或写入以不同的方式

select fld8, fld11, fld12, sum(coalesce(fld3,0)), fld4 
from tbl1 
INNER JOIN tbl2 on fld1=fld5 and fld2=fld6 
INNER JOIN tbl3 on fld7=fld8 
GROUP BY fld8, fld11, fld12, fld4 

现在都假设你有记录在所有3个表格中。如果情况并非如此,则可能需要使用外连接,并根据引擎在总场或nvl上合并。

所以也许......

SELECT fld8, fld11, fld12, sum(coalesce(fld3,0)), fld4 
FROM tbl1 
LEFT JOIN tbl2 on fld1=fld5 and fld2=fld6 
LEFT JOIN tbl3 on fld7=fld8 
GROUP BY fld8, fld11, fld12, fld4 
+0

谢谢,我没有使用Group by,而是使用Order by。我已经使用LEFT JOIN构建了查询并且像迷人一样工作。 – Sanjay 2013-03-13 15:42:57

0

你必须有group by

select fld8, fld11, fld12, sum(fld3), fld4 
from tbl1, tbl2, tbl3 where fld1=fld5 and fld2=fld6 and fld7=fld8 
group by fld8, fld11, fld12, fld4 

否则怎么会sum功能工作?

+1

他们不*拥有*拥有* GROUP BY',根据所需的结果,他们可能需要'sum(fld3)OVER()'。取决于他们希望'sum(fld3)'将要返回。 – 2013-03-12 20:58:42