我有张桌子:
Vers | Rev
3 | A
7 | B
13 | C第二张桌子:
Info | Version
aab | 1
adr | 2
bhj | 3
bgt | 4
nnh | 4
ggt | 7我需要一张桌子:
Info | Version | Rev
aab | 1 | A
adr | 2 | A
bhj | 3 | A
bgt | 4 | B
nnh | 4 | B
ggt | 7 | B我怎样才能达到最终的结果?
Rev A是1-3版本,Rev B是4-7版本,Rev C是5-13版本.如果我试图用VB Excel来完成这个任务,我会在新列中添加一个1。然后得到第一个Vers值(3) -秒Vers值(7)然后输出4.
然后,如果<=新列和>= Vers编写Rev.,我将使用一些逻辑。
我不知道如何在SQL中这样做,我需要这样做!
发布于 2019-01-30 23:08:21
使用outer apply
select t2.*, t1.rev
from table2 t2 outer apply
(select top (1) t1.*
from table1 t1
where t2.version <= t1.vers
order by t1.vers asc
) t1;这将获得table1中相对于table2中的每个版本的“下一步”版本。
发布于 2019-01-30 23:12:22
您还可以使用子查询来完成这一任务:
SELECT *
, (SELECT TOP 1 b.rev
FROM Table1 b
WHERE a.version <= b.vers
ORDER BY b.vers)
FROM Table2 a发布于 2019-01-30 23:17:03
或者第三个版本:
declare @t1 table(V int, R char(1))
insert @t1 values (3,'A'),(7,'B'),(13,'C')
declare @t2 table(I char(3), V int)
insert @t2 values ('aab',1),('adr',2),('bhj',3),('bgt',4),('nnh',4),('ggt',7)
select t2.*, t1.R
from @t2 t2
join @t1 t1 on t1.V>=t2.V and not exists(select * from @t1 t3 where t3.V>=t2.v and t3.V<t1.V)https://stackoverflow.com/questions/54450865
复制相似问题