日期:2014-05-17  浏览次数:20667 次

忘了怎么搞。。。



根据图一的两个表得到图二的查询

------解决方案--------------------
create table #tb1 (wlcode varchar(50))
create table #tb2 (qty int,wlcode varchar(50),depcode varchar(2))

insert into #tb1 
select '10201002' union all
select '10201005' union all
select '10201015' union all
select '10201050' 

insert into #tb2 
select 32,'10201005',1 union all
select 16,'10201015',1 union all
select 22,'10201050',1 union all
select 55,'10201005',2 union all
select 14,'10201015',2 union all
select 31,'10201050',2 




select qty= case when c.qty IS NULL  then 0 else c.qty end ,ab.wlcode ,ab.number   from 
(select a.wlcode ,b.number  from #tb1 a join master .dbo.spt_values b on b.number <3 and b.number >0
where b.type='P' ) ab left join #tb2 c on ab.number =c.depcode and ab.wlcode =c.wlcode 
order by ab.number ,ab.wlcode 


drop table #tb1 
drop table #tb2 

------解决方案--------------------
with tb as
(
  select distinct depcode from t2
)
, tb2 as
(
  select wlcode from t1
  except
  select wlcode from t2
)
select * from t2
union all
select 0, wlcode, depcode
from tb2,tb
------解决方案--------------------
select
 isnull(b.qty,0),a.*
from
(select * from a cross join (select distinct depcode from b) as b) as a 
left join b on a.wlcode=b.wlcode

------解决方案--------------------
select t2.* from t1 
inner join t2
on t1.wlcode = t2.wlcode 
union all
select 0,a.wlcode,b.depcode from
(
select t1.* from t1
left join t2
on t1.wlcode = t2.wlcode 
where t2.qty is null
) a cross
(
  select depcode from t2
) b
有点难度:怎么从旧列创建新列的值