日期:2014-05-18 浏览次数:20659 次
---测试数据---
if object_id('[表1]') is not null drop table [表1]
go
create table [表1]([名称] varchar(1),[数量] int)
insert [表1]
select 'R',1 union all
select 'R',2 union all
select 'R',4 union all
select 'R',6
if object_id('[表2]') is not null drop table [表2]
go
create table [表2]([名称] varchar(1),[数量] int,[金额] int)
insert [表2]
select 'R',0,2 union all
select 'R',0,4 union all
select 'R',1,5 union all
select 'R',5,3 union all
select 'R',8,6
 
---查询---
select 
  a.数量1 as 数量,
  b.金额
from
(
select 
  数量 as 数量1,
  (select max(数量) from [表2] where 数量<t.数量) as 数量2
from [表1] t
) a
left join [表2] b
on a.数量2=b.数量
---结果---
数量          金额          
----------- ----------- 
1           2
1           4
2           5
4           5
6           3
(所影响的行数为 5 行)
------解决方案--------------------
不好意思上面有个地方写反了
if object_id('a') is not null
 drop table a
go
create table a([名称] varchar(10),[数量] int)
delete from a
insert a select 'R',1
insert a select 'R',2
insert a select 'R',4
insert a select 'R',6
insert a select 'R',-1
go
if object_id('b') is not null
 drop table b
go
create table b([名称] varchar(10),[数量] int,[金额] int)
insert b select 'R','0','2'
insert b select 'R','0','4'
insert b select 'R','1','5'
insert b select 'R','5','3'
insert b select 'R','8','6'
go
select a.[名称],a.数量,b.[金额]
from  
(
	select [名称],数量1,max(数量2) as 数量2
	from
	(
		select a.数量 as 数量1,b.数量 as 数量2,a.[名称]
		from a
		  left join b
			on a.数量>b.数量 and a.[名称]=b.[名称]
	) c
	group by [名称],数量1
) d
left join a on d.[名称]=a.[名称]  and d.数量1=a.数量  
left join b on d.[名称]=b.[名称]  and d.数量2=b.数量  
------解决方案--------------------
select  
   [表1].数量
   ,[表2].金额
from
   [表1] left join  
   (select  
      ,(select min([表1].数量) from [表1] where [表1].数量>[表2].数量) as 数量
       ,[表2].金额
    from [表2]
   ) as [表2]
   on [表1].数量=[表2].数量