--表 #test1 对应你表 cal2
--create table #test1(桩号 int,kr varchar(10))
--insert into #test1(桩号,kr) values(1,'a1')
--insert into #test1(桩号,kr) values(2,'a2')
--insert into #test1(桩号,kr) values(3,'a3')
--insert into #test1(桩号,kr) values(4,'a4')
--insert into #test1(桩号,kr) values(5,'a5')
--insert into #test1(桩号,kr) values(6,'a6')
--表 #test2 对应你表 hdm,有多个数据,如 1.1,1.2
--create table #test2(起点 numeric(10,1),kn varchar(10))
--insert into #test2(起点,kn) values(1.1,'a1.1')
--insert into #test2(起点,kn) values(1.2,'a1.2')
--insert into #test2(起点,kn) values(2.2,'a2.2')
--insert into #test2(起点,kn) values(3.1,'a3.1')
--insert into #test2(起点,kn) values(4.5,'a4.5')
--insert into #test2(起点,kn) values(5.3,'a5.3')
--insert into #test2(起点,kn) values(6.6,'a6.6')
--insert into #test2(起点,kn) values(6.1,'a6.1')
-- 先求表 #test2 的起点的最小值,用函数 floor(起点),如1.1,1.2,就取为1,min(起点)=1.1,如下:
select min(起点)as 起点,floor(起点)as 桩号 from #test2 group by floor(起点)
--再把求min(起点)后的 kn 数据取回来,如下:
select t1.*,t2.kn from
(select min(起点)as 起点,floor(起点)as 桩号 from #test2 group by floor(起点))t1,#test2 t2 where t1.起点=t2.起点
--上面的是过程,实际,只要下面的
--把上表打包为t3,就出现下面的 update,
update #test1 set kr=kn from
(select t1.*,t2.kn from (select min(起点)as 起点,floor(起点)as 桩号 from #test2 group by floor(起点))t1,#test2 t2 where t1.起点=t2.起点)t3
where #test1.桩号=t3.桩号
我没数据,不知道实际测试速度。
[此贴子已经被作者于2016-7-10 18:19编辑过]