请教如何写这样的语句?高手进
表1 t1
code1 name1 num1
1 布料 8
2 原料 9
3 燃料 3
4 辅料 8
表2 t2 num2表示每个月份的库存量
并且code2和date两个为关键字
code2 name2 num2 date
2 原料 5 2007-08
3 燃料 10 2007-07
5 配料 9 2007-07
1 布料 8 2007-08
3 燃料 6 2007-06
2 原料 14 2007-07
得到结果 当前月份的信息,如果t1中的物料在t2中不存在,则num2为0,如果在t2没有当前月的信息,则取t2中对应物料代码的当前月的上一个月,或则说最大的月
code1 name1 num1 num2
1 布料 8 8
2 原料 9 5
3 燃料 3 10
4 辅料 8 0
------解决方案-------------------- Select a.code1,a.name1,a.num1,isnull(b.num2,0) as num2
from t1 as a ,(
Select code2,num2 from t2 as x
Where not exists(Select * from t2
Where code2=x.code2 and date> x.date)) as b
on a.code1=b.code2
------解决方案--------------------WangZWang(先来),應該用left join
------解决方案-------------------- 步骤一、建视图v1:对t2,按分组code2,获取最大date。
select code2,max(date) as date from t2 group by code2
运行结果:
code2 date
1 2007-08
2 2007-08
3 2007-07
5 2007-07
步骤二、建视图v2:获取每个code2的最大date的num2。
select t2.code2,t2.num2,t2.date from t2 inner join v1 on t2.code2 = v1.code2 and t2.date = v1.date
运行结果:
code2 num2 date
1 8 2007-08
2 5 2007-08
3 10 2007-07
5 9 2007-07
步骤三、建视图v3:最终结果视图。
select t1.code1,t1.name1,t1.num1,isnull(v2.num2,0) as num2 from t1 left outer join v2 on t1.code1 = v2.code2
code1 name1 num1 num2
1 布料 8 8
2 原料 9 5
3 燃料 3 10
4 辅料 8 0
视图v2是绕了一圈得到的结果,是解决问题的关键点。
------解决方案--------------------drop table #t2
drop table #t1
create table #t1
(code1 int, name1 varchar(10), num1 int)
insert into #t1
select 1, '布料 ', 8 union all
select 2, '原料 ', 9 union all
select 3, '燃料 ', 3 union all
select 4, '輔料 ', 8
create table #t2
(code2 int, name2 varchar(10), num2 int, date varchar(10))