有一表格数据为
BG0001
BG0002
BG0003
BG0004
BG0005
BG0006
BG0007BG0012
BG0023
BG0024
BG0025
BG0026需要得出如下的结果:
BG0001 - BG0007, BG0012, BG0023 - BG0026不晓得T_SQL语句是否能够实现,用编程语言实现亦可!

解决方案 »

  1.   

    USE TEMPDB
    GO-- 测试数据
    DECLARE @t TABLE(col varchar(10))
    INSERT @t SELECT 'BG0001'
    UNION ALL SELECT 'BG0002'
    UNION ALL SELECT 'BG0003'
    UNION ALL SELECT 'BG0004'
    UNION ALL SELECT 'BG0005'
    UNION ALL SELECT 'BG0006'
    UNION ALL SELECT 'BG0007'UNION ALL SELECT 'BG0012'
    UNION ALL SELECT 'BG0023'
    UNION ALL SELECT 'BG0024'
    UNION ALL SELECT 'BG0025'
    UNION ALL SELECT 'BG0026'-- 查询
    DECLARE @s nvarchar(4000), @col varchar(10)
    SELECT @s='', @col = '-1'
    SELECT @s = CASE 
    WHEN RIGHT(@col, 4) + 1 = RIGHT(col, 4) THEN @s
    ELSE @s + CASE WHEN @s LIKE '%,' + @col THEN '' ELSE ' - ' + @col END + ',' + col END,
    @col = col
    FROM @t
    ORDER BY col
    SET @s = STUFF(@s, 1, 6, '') + CASE WHEN @s LIKE '%,' + @col THEN '' ELSE ' - ' + @col END
    SELECT @s-- 结果:BG0001 - BG0007,BG0012,BG0023 - BG0026(1 行受影响)