日期:2014-05-18 浏览次数:20540 次
---测试数据--- 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].数量