在线等一条SQL
表1
A B C D
1 0.05 2006 2007
2 0.1 2007 2008
表2
A1 B1
1 2004.5
2 2005.5
3 2006.5
4 2007.5
A1 B1 B
1 2004.5
2 2005.5
3 2006.5 0.05
4 2007.5 0.1
------解决方案--------------------select 表2.* , 表1.b from 表2 left 表1 on left(表2.b1,4) = 表1.c
------解决方案-------------------- if object_id( 'test1 ') is not null
drop table test1
create table test1(
a int,
b float,
c int,
d int
)
if object_id( 'test2 ') is not null
drop table test2
create table test2(
a1 int,
b1 float
)
insert into test1
select 1, 0.05, 2006, 2007 union
select 2, 0.1, 2007, 2008
insert into test2
select 1, 2004.5 union
select 2, 2005.5 union
select 3, 2006.5 union
select 4 , 2007.5
select * from test1
select * from test2
select b.* ,B1=mAX(case when b.b1> a.c and b.b1 <a.d then
a.b else null end) from test2 b , test1 a
GROUP by b.a1,b.b1
------解决方案-----------------------你表1中C和D列是什么类型???
---创建测试
Declare @表1 Table(A int,B decimal(8,2),C datetime,D datetime)
Insert @表1 Select 1,0.05, '2006-01-01 ', '2007-01-01 '
Union All Select 2,0.1 , '2007-01-01 ', '2008-01-01 '
Declare @表2 Table(A1 int,B1 datetime)
Insert @表2 Select 1, '2004-03-01 '
Union All Select 2, '2005-03-01 '
Union All Select 3, '2006-03-01 '
Union All Select 4, '2007-03-01 '
Select * From @表1
Select * From @表2
---查询结果
Select
A.*,B.B
From
@表2 As A
Left Join
@表1 As B
On A.B1> =B.C And A.B1 <=B.D
--结果
/*
A1 B1 B
----------- ------------------------ ----------
1 2004-03-01 00:00:00.000 NULL
2 2005-03-01 00:00:00.000 NULL
3 2006-03-01 00:00:00.000 .05
4 2007-03-01 00:00:00.000 .10
(所影响的行数为 4 行)
*/
------解决方案--------------------select b.* , isnull(cast(a.b as varchar), ' ') b
from b left join a on b.b1 between a.c and a.d