首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL循环和联接

SQL循环和联接
EN

Stack Overflow用户
提问于 2019-01-30 23:00:43
回答 3查看 59关注 0票数 0

我有张桌子:

代码语言:javascript
复制
Vers | Rev
3    | A
7    | B
13   | C

第二张桌子:

代码语言:javascript
复制
Info | Version
aab  | 1
adr  | 2
bhj  | 3
bgt  | 4
nnh  | 4
ggt  | 7

我需要一张桌子:

代码语言:javascript
复制
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中这样做,我需要这样做!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-01-30 23:08:21

使用outer apply

代码语言:javascript
复制
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中的每个版本的“下一步”版本。

票数 0
EN

Stack Overflow用户

发布于 2019-01-30 23:12:22

您还可以使用子查询来完成这一任务:

代码语言:javascript
复制
SELECT *
, (SELECT TOP 1 b.rev 
   FROM Table1 b 
   WHERE a.version <= b.vers 
   ORDER BY b.vers)
FROM Table2 a
票数 0
EN

Stack Overflow用户

发布于 2019-01-30 23:17:03

或者第三个版本:

代码语言:javascript
复制
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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54450865

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档