T-SQL汇总一行中的数字

Nic*_*net 0 t-sql sql-server-2008

我需要总结一些数字

CREATE TABLE #t(num int);

INSERT #t
SELECT 10001 UNION ALL
SELECT 10002 UNION ALL
SELECT 10003 UNION ALL
SELECT 10004 UNION ALL
SELECT 10005 UNION ALL
SELECT 10006 UNION ALL
SELECT 10007 UNION ALL
SELECT 10008 UNION ALL
SELECT 10009 UNION ALL
SELECT 10010 UNION ALL
SELECT 10020 UNION ALL
SELECT 10030 UNION ALL
SELECT 10040 UNION ALL
SELECT 10041 UNION ALL
SELECT 10042 UNION ALL
SELECT 10043 UNION ALL
SELECT 10050 UNION ALL
SELECT 10060 UNION ALL
SELECT 10070 UNION ALL
SELECT 10075 UNION ALL
SELECT 10076 UNION ALL
SELECT 10077;

--DROP TABLE #T;
Run Code Online (Sandbox Code Playgroud)

以一种结果可能的简单形式.

10001-10010, 10020, 10030, 10040-10043, 10050, 10060, 10070, 10075-10077
Run Code Online (Sandbox Code Playgroud)

任何帮助将受到高度赞赏.

Lam*_*mak 5

试试这个:

WITH CTE1 AS
(
    SELECT  *, num - ROW_NUMBER() OVER(ORDER BY num) Corr
    FROM #t
), CTE2 AS
(
    SELECT MIN(num) MinNum, MAX(num) MaxNum, Corr
    FROM CTE1
    GROUP BY Corr
)

SELECT  CAST(MinNum AS VARCHAR) + 
        CASE WHEN MaxNum != MinNum THEN ' - ' + CAST(MaxNum AS VARCHAR) ELSE '' END Res
FROM CTE2
Run Code Online (Sandbox Code Playgroud)