sql 左连接查询出来的求各结果不准确,被乘了2倍
答案:2 悬赏:0 手机版
解决时间 2021-04-19 09:22
- 提问者网友:疯孩纸
- 2021-04-19 06:00
sql 左连接查询出来的求各结果不准确,被乘了2倍
最佳答案
- 五星知识达人网友:污到你湿
- 2021-04-19 07:10
a与b和c分别做左连接后再把数据合并
select t1.*,t2.[在201312激活且在网90天用户数],t2.[在201401激活且在网90天用户数],t2.[在201402激活且在网90天用户数]
from
(select a.*
,sum(c.[在11月份一级渠道协议上户量]) as [在11月份一级渠道协议上户量]
,sum(c.[在12月份一级渠道协议上户量]) as [在12月份一级渠道协议上户量]
,sum(c.[在12月份一级渠道协议上户量]-c.[在11月份一级渠道协议上户量]) as 辖区一级渠道上户量环比
FROM [sc市场销售部].[dbo].[2013年底标卡认购任务基数_罗峰_提卡用户数] as a
left join [sc市场销售部].[dbo].[2013年底标卡认购任务基数_罗峰_一级渠道协议上户量] as c
on (a.[乡镇办名称]=c.[营销中心名称] or a.[乡镇办名称]=c.[网格名称])
group by a.[区县]
,a.[乡镇办名称]
,a.[终端认购基础任务]
,a.[标准卡认购基础任务]
,a.[备注]
,a.[提卡用户数]) t1,
(select a.*
,sum(b.[在201312激活且在网90天用户数]) as [在201312激活且在网90天用户数]
,sum(b.[在201401激活且在网90天用户数]) as [在201401激活且在网90天用户数]
,sum(b.[在201402激活且在网90天用户数]) as [在201402激活且在网90天用户数]
FROM [sc市场销售部].[dbo].[2013年底标卡认购任务基数_罗峰_提卡用户数] as a
left join [sc市场销售部].[dbo].[2013年底标卡认购任务基数_罗峰_激活用户数] as b
on (a.[乡镇办名称]=b.[营销中心名称] or a.[乡镇办名称]=b.[网格名称])
group by a.[区县]
,a.[乡镇办名称]
,a.[终端认购基础任务]
,a.[标准卡认购基础任务]
,a.[备注]
,a.[提卡用户数]) t2
where t1.[区县]=t2.[区县]
,t1.[乡镇办名称]=t2.[乡镇办名称]
,t1.[终端认购基础任务]=t2.[终端认购基础任务]
,t1.[标准卡认购基础任务]=t2.[标准卡认购基础任务]
,t1.[备注]=t2.[备注]
,t1.[提卡用户数]=t2.[提卡用户数]追问您好。。。我之前的写法问题出在哪里呢 ?莫非多个条左连接后不能求和 ?
我试了
select a.*,b.*,c.*
from aa as a
left join bb as b
on a.a1=b.b1
left join cc as c
on a.a2=c.1
这样出来 的结果 并没有多条同样的记录 啊追答create table a
(id int)
create table b
(id int,
value int)
create table c
(id int,
value int)
insert into a values (1)
insert into a values (2)
insert into b values (1,10)
insert into b values (1,20)
insert into c values (1,10)
insert into c values (2,20)
select *
from a left join b on a.id=b.id
left join c on a.id=c.id你自己试试吧,一个主表和2个明细表关联后,这样的结果肯定不对
select t1.*,t2.[在201312激活且在网90天用户数],t2.[在201401激活且在网90天用户数],t2.[在201402激活且在网90天用户数]
from
(select a.*
,sum(c.[在11月份一级渠道协议上户量]) as [在11月份一级渠道协议上户量]
,sum(c.[在12月份一级渠道协议上户量]) as [在12月份一级渠道协议上户量]
,sum(c.[在12月份一级渠道协议上户量]-c.[在11月份一级渠道协议上户量]) as 辖区一级渠道上户量环比
FROM [sc市场销售部].[dbo].[2013年底标卡认购任务基数_罗峰_提卡用户数] as a
left join [sc市场销售部].[dbo].[2013年底标卡认购任务基数_罗峰_一级渠道协议上户量] as c
on (a.[乡镇办名称]=c.[营销中心名称] or a.[乡镇办名称]=c.[网格名称])
group by a.[区县]
,a.[乡镇办名称]
,a.[终端认购基础任务]
,a.[标准卡认购基础任务]
,a.[备注]
,a.[提卡用户数]) t1,
(select a.*
,sum(b.[在201312激活且在网90天用户数]) as [在201312激活且在网90天用户数]
,sum(b.[在201401激活且在网90天用户数]) as [在201401激活且在网90天用户数]
,sum(b.[在201402激活且在网90天用户数]) as [在201402激活且在网90天用户数]
FROM [sc市场销售部].[dbo].[2013年底标卡认购任务基数_罗峰_提卡用户数] as a
left join [sc市场销售部].[dbo].[2013年底标卡认购任务基数_罗峰_激活用户数] as b
on (a.[乡镇办名称]=b.[营销中心名称] or a.[乡镇办名称]=b.[网格名称])
group by a.[区县]
,a.[乡镇办名称]
,a.[终端认购基础任务]
,a.[标准卡认购基础任务]
,a.[备注]
,a.[提卡用户数]) t2
where t1.[区县]=t2.[区县]
,t1.[乡镇办名称]=t2.[乡镇办名称]
,t1.[终端认购基础任务]=t2.[终端认购基础任务]
,t1.[标准卡认购基础任务]=t2.[标准卡认购基础任务]
,t1.[备注]=t2.[备注]
,t1.[提卡用户数]=t2.[提卡用户数]追问您好。。。我之前的写法问题出在哪里呢 ?莫非多个条左连接后不能求和 ?
我试了
select a.*,b.*,c.*
from aa as a
left join bb as b
on a.a1=b.b1
left join cc as c
on a.a2=c.1
这样出来 的结果 并没有多条同样的记录 啊追答create table a
(id int)
create table b
(id int,
value int)
create table c
(id int,
value int)
insert into a values (1)
insert into a values (2)
insert into b values (1,10)
insert into b values (1,20)
insert into c values (1,10)
insert into c values (2,20)
select *
from a left join b on a.id=b.id
left join c on a.id=c.id你自己试试吧,一个主表和2个明细表关联后,这样的结果肯定不对
全部回答
- 1楼网友:山有枢
- 2021-04-19 07:18
那是因为 left join 右边的表 同样的数据有2条追问我的这个结果,C表的结果被乘了3倍;B表的结果被乘了2倍。。。。那正确的写法应该如何 ?追答不知道你的数据形式,没法给你写
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯