1

我有一个名为 student data 的表,它有两列SINFOSIDSINFO的范围从G74001G99999。下面是表格的格式。

编写一个 SQL 查询以获取来自“ SINFO ”的间隙的前 n 个(在本例中假设为 3)。

在这种情况下,前 3 个间隙是 G74003、G74004、G74006。如何通过 SQL 查询来实现这一点。SID是一个唯一值。

在此处输入图像描述

4

1 回答 1

1

创建一个包含所有数字的临时表然后左连接基表并选择所有空值或顶部值,例如

Create Table #Tmp
([SINFO] [nvarchar](50) NULL)

declare @ddd int =74000 
WHILE @ddd < 74015 
BEGIN  
   select @ddd= @ddd +1
   insert into #Tmp (SINFO)  values (  'G' + Convert(Nvarchar ,  @ddd ))
END;  

--all gaps
select  #Tmp.SINFO , Table_2.SINFO  from #Tmp
left join Table_2 on #Tmp.SINFO = Table_2.SINFO 
where Table_2.SINFO is null
order by   #Tmp.SINFO

--Frist gaps
select top(1) #Tmp.SINFO , Table_2.SINFO  from #Tmp
left join Table_2 on #Tmp.SINFO = Table_2.SINFO 
where Table_2.SINFO is null
order by   #Tmp.SINFO

If(OBJECT_ID('tempdb..#Tmp') Is Not Null)
Begin
  Drop Table #Tmp
End
于 2018-07-16T06:40:19.387 回答