连接序列的格式如1-3,6,8-10,12

时间:2015-07-13 05:43:07

标签: sql-server sql-server-2008

我有数字,但不是序列。如果这些是顺序的,那么结果应如下所示。 如果我有1,2,3,6,8,9,10,12等数据。 我需要像1-3,6,8-10,12

这样的结果

1 个答案:

答案 0 :(得分:1)

declare @Digits table (Value int primary key)
INSERT @Digits VALUES (1),(2),(3),(6),(8),(9),(10),(12)

SELECT STUFF(CONVERT(varchar(max),
(
    SELECT
        ',' + CASE 
            WHEN MIN(Value) = MAX(Value) THEN CONVERT(varchar(10), MIN(Value)) 
            ELSE CONVERT(varchar(10), MIN(Value)) + '-' + CONVERT(varchar(10), MAX(Value)) 
        END
    FROM (SELECT ROW_NUMBER() OVER (ORDER BY Value) AS Seq, Value FROM @Digits) Data
    GROUP BY Value - Seq
    FOR XML PATH('')
)), 1, 1, '') AS Result

SQL Fiddle