如何在SQL表列中获得N个间隙?

时间:2018-07-16 05:51:23

标签: mysql sql

我有一个名为学生数据的表,其中有两列 SINFO SID SINFO ,范围从 G74001 G99999 。下面是表格的格式。

编写一个SQL查询,以从' SINFO '中获得第n个缺口(在这种情况下,假设为3)。

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

enter image description here

1 个答案:

答案 0 :(得分: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