T-SQL查询帮助-查找表中的范围

T-SQL查询帮助-查找表中的范围,sql,sql-server,tsql,Sql,Sql Server,Tsql,我有一张如下的桌子。我需要在名称范围内的结果,如下所述。请提供T-SQL查询 ID Name 101 AA1 102 AA1 103 AA1 104 AA2 105 AA2 106 AA3 107 AA1 108 AA1 109 AA2 110 AA2 111 AA2 112 AA4 需要结果为 Name Range AA1 101-103 AA2 104-105 AA3 106 AA1 107-108 AA2 109-111 AA4 112 与语句、分区依据和分组依据一起使用

我有一张如下的桌子。我需要在名称范围内的结果,如下所述。请提供T-SQL查询

ID  Name
101 AA1
102 AA1
103 AA1
104 AA2
105 AA2
106 AA3
107 AA1
108 AA1
109 AA2
110 AA2
111 AA2
112 AA4
需要结果为

Name Range
AA1  101-103
AA2  104-105
AA3  106
AA1  107-108
AA2  109-111
AA4  112

与语句、分区依据和分组依据一起使用

;WITH T
     AS (SELECT *,
                ID - ROW_NUMBER() OVER (PARTITION BY [Name] ORDER BY [ID]) AS Grp
         FROM   @tbl1)
SELECT [Name],
       CAST(MIN(Id) AS VARCHAR(5))+'-'+CAST(MAX(Id) AS VARCHAR(5)) AS Range
FROM   T
GROUP  BY [Name],
          Grp
ORDER  BY MIN(ID)

与语句、分区依据和分组依据一起使用

;WITH T
     AS (SELECT *,
                ID - ROW_NUMBER() OVER (PARTITION BY [Name] ORDER BY [ID]) AS Grp
         FROM   @tbl1)
SELECT [Name],
       CAST(MIN(Id) AS VARCHAR(5))+'-'+CAST(MAX(Id) AS VARCHAR(5)) AS Range
FROM   T
GROUP  BY [Name],
          Grp
ORDER  BY MIN(ID)

您可以使用行号差异方法进行此操作:

select name, min(id), max(id)
from (select t.*,
             row_number() over (order by id) as seqnum,
             row_number() over (partition by name order by id) as seqnum_n
      from t
     ) t
group by name, (seqnum - seqnum_n);

很难解释这是如何工作的。对于具有连续ID的名称,行号的差异是恒定的。如果运行子查询,您将看到行号是什么样子,以及差异如何满足您的需要。

您可以使用行号差异方法来实现这一点:

select name, min(id), max(id)
from (select t.*,
             row_number() over (order by id) as seqnum,
             row_number() over (partition by name order by id) as seqnum_n
      from t
     ) t
group by name, (seqnum - seqnum_n);

很难解释这是如何工作的。对于具有连续ID的名称,行号的差异是恒定的。如果您运行子查询,您将看到行号是什么样子,以及差异是如何满足您的需要的。

只需使用concat和group by,如下所示:

SELECT NAME, CONCAT(MIN(id), '-', MAX(id)) range
FROM Table1
GROUP BY NAME

只需将concat与group by一起使用,如下所示:

SELECT NAME, CONCAT(MIN(id), '-', MAX(id)) range
FROM Table1
GROUP BY NAME

良好的查询和更快的数据检索。缺少关键字良好的查询,数据检索速度更快。作为关键词遗漏