首页新闻找找看学习计划

求一个sql语句,不会写

0
悬赏园豆:10 [已解决问题] 解决于 2014-08-20 09:33

两个结果集如何合并,如下两个结果集:

如何得到这个结果:

pdate  sumcost  sumincome
2014-01  6786     0
2014-02  132     0
2014-03  242     5656
2014-04  657     3
2014-05  6801     35
2014-06  2786     4646
2014-07  10476     0
2014-08  4703     0
2014-09  0       234

二豆的主页 二豆 | 初学一级 | 园豆:44
提问于:2014-08-19 15:33
< >
分享
最佳答案
1

假设示例中的两个表分别为tblDate1,tblDate2
select a.pdate,sum(sumcost) as sumcost,sum(sumincome) as sumincome from (
select pdate,0 as sumcost,sumincome from tblDate1
union all select pdate,sumcost,0 as sumincome from tblDate2
) as a group by a.pdate order by a.pdate

收获园豆:6
会飞的金鱼 | 小虾三级 |园豆:881 | 2014-08-19 21:18

  你这个好,都不用left join,我咋没想到

二豆 | 园豆:44 (初学一级) | 2014-08-20 09:31
其他回答(4)
0

SELECT t1.dt,t2.sumcost,t1.sumincome FROM t1
LEFT JOIN t2 ON t1.dt=t2.dt
UNION
SELECT t2.dt,t1.sumcost,t2.sumincome FROM t2
LEFT JOIN t1 ON t1.dt=t2.dt

采用union。

也可以先对pdate union,然后在左连接两个表。

收获园豆:1
幻天芒 | 园豆:36594 (高人七级) | 2014-08-19 15:42

t1和t2都是好长一段sql语句才的出来的,  代入到你提供的sql语句里面 ,t1和t2是不是执行了两遍

支持(0) 反对(0) 二豆 | 园豆:44 (初学一级) | 2014-08-19 16:40

@深蓝色左手: 能用临时表么?

支持(0) 反对(0) 幻天芒 | 园豆:36594 (高人七级) | 2014-08-19 17:43

哈哈你真是各种回答啊,我来反驳你下吧。这种多表关联首先要找入口,不要盲目关联。

 

 

支持(0) 反对(0) CTRA王大大 | 园豆:30 (初学一级) | 2014-08-19 22:31

@凡图: 因为从结果来看,是对两个表的pdate列取并集,然后再左关联另外两列,所以考虑了上述两种方式。而且从你的回答来看,也是采用的我的第二种方案,只是用了with来简化语句,同样采用了临时表的方式...

支持(0) 反对(0) 幻天芒 | 园豆:36594 (高人七级) | 2014-08-20 00:04
0

SELECT 

  t1.pdate      AS [pdate],

  t1.sumincome  AS [sumincome],

  t2.sumcost    AS [sumcost]

FROM dbo.Table1 AS t1

LEFT JOIN dbo.Table2 AS t2

ON t1.pdate = t2.pdate

WHERE ....

丶谦信 | 园豆:308 (菜鸟二级) | 2014-08-19 16:37
0

select a.Pdate,(select sumcost from Table1 where Pdate=a.Pdate) as sumcost,(select sumincome from Table2 where Pdate=a.Pdate) as sumincome  from (select Pdate  from Table1 Union
select Pdate from Table2) as a

日期有重复的话,需要再加一列ID来唯一标识数据或者对数据SUM

happydaily | 园豆:674 (小虾三级) | 2014-08-19 18:07
1

记住SQL不管多复杂,多个库,多个表,多个表关系,必须找到入口,如果没有按实际情况再分析!绝对是经验!

;with res as(

select  pdate from t1

union all

select pdate  from t2

)select distinct * into #temp_1  from res ;---入口,然后让2个子表左关联

select a1.pdate,t2.sumcost,t1.sumincome  from #temp_1 a1

left join t1 on a1.pdate =t1.pdate 

left join t2 on a1.pdate =t2.pdate 

收获园豆:3
CTRA王大大 | 园豆:30 (初学一级) | 2014-08-19 22:33

  嗯,好的,谢谢

支持(0) 反对(0) 二豆 | 园豆:44 (初学一级) | 2014-08-20 09:32
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册