+ -
当前位置:首页 → 问答吧 → left join on 多表同表不同条件

left join on 多表同表不同条件

时间:2011-12-19

来源:互联网

SQL code
sql="select a.ID as DID,"
    sql=sql&" IsNull(sum(b.Signing_AmountIN),0) as q1a,"
    sql=sql&" IsNull(sum(c.Signing_AmountIN),0) as q2a"
    sql=sql&" from KL_Depart as a"
    
    sql=sql&" left join KL_Signing b"
    sql=sql&" on b.DepartID = a.ID"
    sql=sql&" and b.Signing_Stage = 3 and b.UnitID = "&KL_UnitID&" and b.Signing_UseDate between '"&CDate(BDate)&"' and '"&CDate(BDate2)&"'"
    
    sql=sql&" left join KL_Signing c"
    sql=sql&" on c.DepartID = a.ID"
    sql=sql&" and c.Signing_Stage = 3 and c.UnitID = "&KL_UnitID&" and c.ISCheckD = 1 and c.Signing_UseDate between '"&CDate(BDate)&"' and '"&CDate(BDate2)&"'"

    
    sql=sql&" where a.UnitID  ="&KL_UnitID&" and a.ISWriteOFF = 0"
    sql=sql&" group by a.ID"
    sql=sql&" order by q1a desc"


如果我只Left join 一个的话,结果是正确的,但是我再增加了一个Left Join的话,结果q1a是正确结果的2倍,q2a是正确结果的3倍,请指点一下。

作者: cn6177770   发布时间: 2011-12-19

两种解决办法:
1.先将表两两连接,然后再将连接结果连接:
select * from(
select ... from .. a left join ... b on a.id=b.id
)a inner join (
select ... from ...a left join ... b on a.id=b.id
)b on a.id=b.id
2.只用一个连接,而另一个在select 子句中用子查询获得:
select .....,(select xx from c where id=a.id) as xx
from .... a left join ... b on a.id=b.id

作者: qianjin036a   发布时间: 2011-12-19

不好意思!能否按照我的代码详细给点提示咯!我按照你写的第一种方法

sql="select * from("
sql=sql&" select a.ID as DID,"
sql=sql&" IsNull(sum(b.Signing_AmountIN),0) as q1a,"
sql=sql&" from KL_Depart as a"

sql=sql&" left join KL_Signing b"
sql=sql&" on b.DepartID = a.ID"
sql=sql&" and b.Signing_Stage = 3 and b.UnitID = "&KL_UnitID&" and b.Signing_UseDate between '"&CDate(BDate)&"' and '"&CDate(BDate2)&"'"
sql=sql&" where a.UnitID ="&KL_UnitID&" and a.ISWriteOFF = 0"
sql=sql&" ) as aa inner join ("

sql=sql&" select a.ID as DID,"
sql=sql&" IsNull(sum(b.Signing_AmountIN),0) as q2a"
sql=sql&" from KL_Depart as a"

sql=sql&" left join KL_Signing b"
sql=sql&" on b.DepartID = a.ID"
sql=sql&" and b.Signing_Stage = 3 and b.UnitID = "&KL_UnitID&" and b.Signing_UseDate between '"&CDate(BDate1)&"' and '"&CDate(BDate2)&"'"
sql=sql&" where a.UnitID ="&KL_UnitID&" and a.ISWriteOFF = 0"
sql=sql&" ) as bb"

sql=sql&" on bb.DepartID = aa.DepartID"

sql=sql&" group by aa.DID"
sql=sql&" order by aa.q1a desc"

还是不行,因为我最终的目的不是3个表,而是很多表。
我要做的事查询一个表格:

部门 全年总金额 本月金额 全年成本 本月成本 全年... 本月...

这么一张表 ,有很多项目,但求一条SQL语句求出,数据表中KL_Signing中可以根据不同的条件求和,然后一次性输出!请大家帮帮忙!

作者: cn6177770   发布时间: 2011-12-19