来自三张表的,这个查询怎么写?谁帮我一下,我在做一个复杂的日报表
表1:
日期 名称 生产
2006 笔 1.66
2006 纸 <null>
表2
日期 名称 入库
2005 纸 66
2006 笔 60
2006 笔 <null>
2006 皮 <null>
表3
日期 名称 出库
2005 纸 10
2006 笔 2
按日期和名字合并三张表显示如下
日期 名字 生产 入库 出库
2005 纸 <null> 66 10
2006 笔 1.66 60 <null>
2006 笔 <null> <null> 2
2006 纸 <null> 66 <null>
2006 皮 <null> <null> <null>
就是合并三张表,日期和名称相同的,生产,入库,出库有空的才合并,无重复数据出现
还有就是大家有没有比较好的方法制作日报表,就是每日,有哪些产品发生了生产,入库,出库的统计报表。
------解决方案--------------------select isnull(isnull(a.日期,b.日期),c.日期) 日期, isnull(isnull(a.名称,b.名称),c.名称) 名称, sum(a.生产), sum(b.入库) , sum(c.出库 )
from (select 日期, 名称,sum(生产) 生产 from #表1 group by 日期,名称 )a
FULL outer join
(select 日期, 名称,sum(入库) 入库 from #表2 group by 日期,名称 ) b
on a.日期=b.日期 and a.名称=b.名称
FULL outer join
(select 日期, 名称,sum(出库) 出库 from #表3 group by 日期,名称 ) c
on a.日期=c.日期 and a.名称=c.名称
group by isnull(isnull(a.日期,b.日期),c.日期), isnull(isnull(a.名称,b.名称),c.名称)
------解决方案-------------------- select 名称,日期,max(生产) as 生产,max(入库) as 入库 ,max(出库) as 出库
from(
select isnull(表1.名称,isnull(表2.名称,表3.名称)) as 名称,isnull(表1.日期,isnull(表2.日期,表3.日期)) as 日期,
生产,入库,出库
from 表1 FULL OUTER JOIN 表2 on 表1.日期=表2.日期 and 表1.名称=表2.名称
FULL OUTER JOIN 表3 on 表1.日期=表3.日期 and 表1.名称=表3.名称 and 表2.日期=表3.日期 and 表2.名称=表3.名称
)a
group by 名称,日期
------解决方案-------------------- select 名称,日期,max(生产) as 生产,max(入库) as 入库 ,max(出库) as 出库
from(
select isnull(表1.名称,isnull(表2.名称,表3.名称)) as 名称,isnull(表1.日期,isnull(表2.日期,表3.日期)) as 日期,
生产,入库,出库
from 表1 FULL OUTER JOIN 表2 on 表1.日期=表2.日期 and 表1.名称=表2.名称
FULL OUTER JOIN 表3 on 表1.日期=表3.日期 and 表1.名称=表3.名称 and 表2.日期=表3.日期 and 表2.名称=表3.名称
)a
where isnull(生产, ' ')= ' ' or isnull(入库, ' ')= ' ' or isnull(出库, ' ')= ' '
group by 名称,日期
union
select 名称,日期,生产,入库,出库
from(
select isnull