27,581
社区成员
发帖
与我相关
我的任务
分享create table chukuhzb (bianhao varchar(10),chukujine int,shuliang int,nianyue datetime)
insert into chukuhzb values('001', 200 ,100 ,'2011-09-09')
insert into chukuhzb values('001', 300 ,200 ,'2011-09-10')
insert into chukuhzb values('002', 204 ,23 ,'2011-09-10')
insert into chukuhzb values('002', 234 ,27 ,'2011-09-11')
insert into chukuhzb values('001', 225 ,150 ,'2011-09-28')
create table kucunhzb(bianhao varchar(10),kucunjine int,kucunshuliang int,nianyue datetime)
insert into kucunhzb values('001', 400 ,300 ,'2011-09-09')
insert into kucunhzb values('001', 300 ,400 ,'2011-09-10')
insert into kucunhzb values('002', 323 ,321 ,'2011-09-10')
insert into kucunhzb values('002', 321 ,434 ,'2011-09-11')
create table rukuhzb(bianhao varchar(10),rukujine int,rukushuliang int,nianyue datetime)
insert into rukuhzb values('001', 21 ,32 ,'2011-09-08')
insert into rukuhzb values('001', 32 ,32 ,'2011-09-10')
insert into rukuhzb values('002', 204 ,32 ,'2011-09-10') --这里日期相同了,更改为2011-09-10
insert into rukuhzb values('002', 232 ,323 ,'2011-09-11')
go
--如果你不能确保三表bianhao一一对应,建议使用full join
select isnull(isnull(t1.bianhao,t2.bianhao),t3.bianhao) bianhao,
t2.kucunjine,
t2.kucunshuliang,
t3.rukujine,
t3.rukushuliang,
t1.chukujine,
t1.shuliang
from
(select t.* from chukuhzb t where nianyue = (select max(nianyue) from chukuhzb where bianhao = t.bianhao)) t1
full join
(select t.* from kucunhzb t where nianyue = (select max(nianyue) from kucunhzb where bianhao = t.bianhao)) t2 on t1.bianhao = t2.bianhao
full join
(select t.* from rukuhzb t where nianyue = (select max(nianyue) from rukuhzb where bianhao = t.bianhao)) t3 on isnull(t1.bianhao,t2.bianhao) = t3.bianhao
order by t1.bianhao
/*
bianhao kucunjine kucunshuliang rukujine rukushuliang chukujine shuliang
---------- ----------- ------------- ----------- ------------ ----------- -----------
001 300 400 32 32 225 150
002 321 434 232 323 234 27
(所影响的行数为 2 行)
*/
--如果你能确保三表bianhao一一对应
--1
select t1.bianhao,
t1.kucunjine,
t1.kucunshuliang,
t2.rukujine,
t2.rukushuliang,
t3.chukujine,
t3.shuliang
from kucunhzb t1 , rukuhzb t2 , chukuhzb t3
where t1.bianhao = t2.bianhao and t1.bianhao = t3.bianhao
and t1.nianyue = (select max(nianyue) from kucunhzb where bianhao = t1.bianhao)
and t2.nianyue = (select max(nianyue) from rukuhzb where bianhao = t2.bianhao)
and t3.nianyue = (select max(nianyue) from chukuhzb where bianhao = t3.bianhao)
/*
bianhao kucunjine kucunshuliang rukujine rukushuliang chukujine shuliang
---------- ----------- ------------- ----------- ------------ ----------- -----------
001 300 400 32 32 225 150
002 321 434 232 323 234 27
(所影响的行数为 2 行)
*/
--2
select t1.bianhao,
t1.kucunjine,
t1.kucunshuliang,
t2.rukujine,
t2.rukushuliang,
t3.chukujine,
t3.shuliang
from kucunhzb t1 , rukuhzb t2 , chukuhzb t3
where t1.bianhao = t2.bianhao and t1.bianhao = t3.bianhao
and not exists(select 1 from kucunhzb where bianhao = t1.bianhao and nianyue > t1.nianyue)
and not exists(select 1 from rukuhzb where bianhao = t2.bianhao and nianyue > t2.nianyue)
and not exists(select 1 from chukuhzb where bianhao = t3.bianhao and nianyue > t3.nianyue)
/*
bianhao kucunjine kucunshuliang rukujine rukushuliang chukujine shuliang
---------- ----------- ------------- ----------- ------------ ----------- -----------
001 300 400 32 32 225 150
002 321 434 232 323 234 27
(所影响的行数为 2 行)
*/
drop table chukuhzb,kucunhzb,rukuhzbcreate table chukuhzb (bianhao varchar(10),chukujine int,shuliang int,nianyue datetime)
insert into chukuhzb values('001', 200 ,100 ,'2011-09-09')
insert into chukuhzb values('001', 300 ,200 ,'2011-09-10')
insert into chukuhzb values('002', 204 ,23 ,'2011-09-10')
insert into chukuhzb values('002', 234 ,27 ,'2011-09-11')
insert into chukuhzb values('001', 225 ,150 ,'2011-09-28')
create table kucunhzb(bianhao varchar(10),kucunjine int,kucunshuliang int,nianyue datetime)
insert into kucunhzb values('001', 400 ,300 ,'2011-09-09')
insert into kucunhzb values('001', 300 ,400 ,'2011-09-10')
insert into kucunhzb values('002', 323 ,321 ,'2011-09-10')
insert into kucunhzb values('002', 321 ,434 ,'2011-09-11')
create table rukuhzb(bianhao varchar(10),rukujine int,rukushuliang int,nianyue datetime)
insert into rukuhzb values('001', 21 ,32 ,'2011-09-08')
insert into rukuhzb values('001', 32 ,32 ,'2011-09-10')
insert into rukuhzb values('002', 204 ,32 ,'2011-09-10') --这里日期相同了,更改为2011-09-10
insert into rukuhzb values('002', 232 ,323 ,'2011-09-11')
go
select isnull(isnull(t1.bianhao,t2.bianhao),t3.bianhao) bianhao,
t2.kucunjine,
t2.kucunshuliang,
t3.rukujine,
t3.rukushuliang,
t1.chukujine,
t1.shuliang
from
(select t.* from chukuhzb t where nianyue = (select max(nianyue) from chukuhzb where bianhao = t.bianhao)) t1
full join
(select t.* from kucunhzb t where nianyue = (select max(nianyue) from kucunhzb where bianhao = t.bianhao)) t2 on t1.bianhao = t2.bianhao
full join
(select t.* from rukuhzb t where nianyue = (select max(nianyue) from rukuhzb where bianhao = t.bianhao)) t3 on isnull(t1.bianhao,t2.bianhao) = t3.bianhao
order by t1.bianhao
/*
bianhao kucunjine kucunshuliang rukujine rukushuliang chukujine shuliang
---------- ----------- ------------- ----------- ------------ ----------- -----------
001 300 400 32 32 225 150
002 321 434 232 323 234 27
(所影响的行数为 2 行)
*/
drop table chukuhzb,kucunhzb,rukuhzbselect isnull(isnull(t1.bianhao,t2.bianhao),t3.bianhao) bianhao,
t2.kucunjine,
t2.kucunshuliang,
t3.rukujine,
t3.rukushuliang,
t1.chukujine,
t1.shuliang
from
(select t.* from chukuhzb t where nianyue = (select max(nianyue) from chukuhzb where bianhao = t.bianhao)) t1
full join
(select t.* from kucunhzb t where nianyue = (select max(nianyue) from kucunhzb where bianhao = t.bianhao)) t2 on t1.bianhao = t2.bianhao
full join
(select t.* from rukuhzb t where nianyue = (select max(nianyue) from rukuhzb where bianhao = t.bianhao)) t3 on isnull(t1.bianhao,t2.bianhao) = t3.bianhao
order by t1.bianhao
/*
bianhao kucunjine kucunshuliang rukujine rukushuliang chukujine shuliang
---------- ----------- ------------- ----------- ------------ ----------- -----------
001 300 400 32 32 300 200
002 321 434 232 323 234 27
(所影响的行数为 2 行)
*/select isnull(isnull(t1.bianhao,t2.bianhao),t3.bianhao) bianhao,
t1.chukujine,
t1.shuliang,
t2.kucunjine,
t2.kucunshuliang,
t3.chukujine,
t3.chukushuliang
from
(select t.* from chukuhzb t where nianyue = (select max(nianyue) from chukuhzb where bianhao = t.bianhao)) t1
full join
(select t.* from kucunhzb t where nianyue = (select max(nianyue) from kucunhzb where bianhao = t.bianhao)) on t1.bianhao = t2.bianhao
full join
(select t.* from rukuhzb t where nianyue = (select max(nianyue) from rukuhzb where bianhao = t.bianhao)) t3 on isnull(t1.bianhao,t2.bianhao) = t3.bianhao t1.chukujine,
t1.shuliang,
t2.kucunjine,
t2.kucunshuliang,
t3.chukujine,
t3.chukushuliang
from
(select t.* from chukuhzb t where nianyue = (select max(nianyue) from chukuhzb where bianhao = t.bianhao)) t1
full join
(select t.* from kucunhzb t where nianyue = (select max(nianyue) from kucunhzb where bianhao = t.bianhao)) on t1.bianhao = t2.bianhao
full join
(select t.* from rukuhzb t where nianyue = (select max(nianyue) from rukuhzb where bianhao = t.bianhao)) t3 on isnull(t1.bianhao,t2.bianhao) = t3.bianhaoselect a.bianhao,a.kucunjine,a.kucunshuliang,b.rukujine),b.rukushuliang,c.chukujine,c.chukushuliang
from(
select bianhao,sum(kucunjine)kucunjine,sum(kucunshuliang)kucunshuliang from 库存表 group by bianhao
)a left join (
select bianhao,sum(rukujine)rukujine,sum(rukushuliang)rukushuliang from 入库表 group by bianhao
)b on a.bianhao=b.bianhao left join (
select bianhao,sum(chukujine)chukujine,sum(chukushuliang)chukushuliang from 出库表 group by bianhao
)c on a.bianhao=c.bianhao