添加序列检查列

时间:2015-05-20 07:59:59

标签: sql sql-server

请你帮我一个脚本来设置一个新列=该列是否比上面的列多一个。我希望它检查序列以检测丢失的文档编号。

我想我显然需要排除第一行?

在IDEA和Excel中显然很简单,只是不确定SQL?

非常感谢, Ĵ

2 个答案:

答案 0 :(得分:1)

KlasLindbäck评论中的链接引用了sqlserver 2005.在sqlserver 2012中,您可以使用LAG

;WITH CTE AS
(
  SELECT 
    CASE WHEN 
      coalesce(LAG(a) over (order by a), 0) + 1 = a 
    THEN 1 ELSE 0 END SequenceIntact, 
    a
  FROM (values(1),(3),(5),(6),(7)) t(a)
)
SELECT 
  SequenceIntact, 
  a
FROM cte

编辑:由于您使用的是sqlserver 2008,因此无法使用LAG,但您可以使用row_number - 我使用dense_rank来补偿重复项:

;WITH CTE as
(
  SELECT 
      a - dense_rank() over (order by a) grp,
      a
  FROM (values(1),(3),(5),(6),(7)) t(a)
)
SELECT 
  CASE WHEN min(a) over (partition by grp) = a 
       and a > 1 -- allowing first value to have SequenceIntact
       THEN 0 ELSE 1 END SequenceIntact,
  a
FROM CTE

结果:

SequenceIntact a
1              1
0              3
0              5
1              6
1              7

答案 1 :(得分:0)

如果您只想检查列的间隙,那么:

DECLARE @t TABLE ( id INT)

INSERT INTO @t VALUES(1),(2),(4),(5),(8),(13),(14)

SELECT * FROM @t t1
LEFT JOIN @t t2 ON t2.id + 1 = t1.id
WHERE t2.id IS NULL

输出:

id  id
1   NULL
4   NULL
8   NULL
13  NULL

这意味着这些值会破坏序列。