能帮我写一个例子呀,是这样的,如:票号:01,02,03~99,100。我要做一个报表查询软件要用到把SQL中的的票号这一项也列在报表中,并且显示在报表格中是这样的效果,01-100,假如,其中有的票号没有的话,效果是这样的,如:01-14,15-28,30-100。  

解决方案 »

  1.   

    --测试数据
    CREATE TABLE tb(col1 varchar(10),col2 int)
    INSERT tb SELECT 'a',2
    UNION ALL SELECT 'a',3
    UNION ALL SELECT 'a',6
    UNION ALL SELECT 'a',7
    UNION ALL SELECT 'a',8
    UNION ALL SELECT 'b',3
    UNION ALL SELECT 'b',5
    UNION ALL SELECT 'b',6
    UNION ALL SELECT 'b',7
    GO--已用编号分布查询
    SELECT col1,start_col2=col2,
    end_col2=(
    SELECT MIN(col2) FROM tb aa
    WHERE col1=a.col1 AND col2>=a.col2 
    AND NOT EXISTS(
    SELECT * FROM tb WHERE col1=aa.col1 AND col2=aa.col2+1))
    FROM tb a
    WHERE NOT EXISTS(
    SELECT * FROM tb WHERE col1=a.col1 and col2=a.col2-1)
    /*--结果
    col1       start_col2  end_col2    
    -------------- -------------- ----------- 
    a          2           3
    a          6           8
    b          3           3
    b          5           7
    --*/