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