读书人

来自三张表的这个查询如何写?哪位高

发布时间: 2012-02-29 16:44:10 作者: rapoo

来自三张表的,这个查询怎么写?谁帮我一下,我在做一个复杂的日报表
表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(表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(生产, ' ') <> ' ' and isnull(入库, ' ') <> ' ' and isnull(出库, ' ') <> ' '

[解决办法]
select isnull(t1.date,isnull(t2.date,t3.date)) date,isnull(t1.name,isnull(t2.name,t3.name)), t1.rk ,t2.ck ,t3.sc
from
(select date,name,sum(rk) as rk from b group by date,name) t1

full join (select date,name,sum(ck) as ck from c group by date,name) t2
on t1.date= t2.date and t1.name = t2.name

full join (select date,name,sum(sc) as sc from a group by date,name) t3
on t1.date=t3.date and t1.name=t3.name

读书人网 >SQL Server

热点推荐