left join on 多表同表不同条件
时间:2011-12-19
来源:互联网
SQL code
如果我只Left join 一个的话,结果是正确的,但是我再增加了一个Left Join的话,结果q1a是正确结果的2倍,q2a是正确结果的3倍,请指点一下。
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
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中可以根据不同的条件求和,然后一次性输出!请大家帮帮忙!
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
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28