Sql 是否将连续项放在一行中?
我有一个类似这样的表,不知道如何编写查询来只检索连续项 部分 数字 身份证件 1. 1. 1. 1. 2. 1. 1. 3. 2. 1. 4. 1. 2. 5. 1. 2. 6. 2. 2. 7. 1. 2. 8. 1.Sql 是否将连续项放在一行中?,sql,sql-server,Sql,Sql Server,我有一个类似这样的表,不知道如何编写查询来只检索连续项 部分 数字 身份证件 1. 1. 1. 1. 2. 1. 1. 3. 2. 1. 4. 1. 2. 5. 1. 2. 6. 2. 2. 7. 1. 2. 8. 1. 您可以使用CTE和密度等级来实现这一点: --setting up data DECLARE @t TABLE ( section int, number int, id int ) insert into @t values(1,1,1), (1,2,1), (1,3
您可以使用CTE和密度等级来实现这一点:
--setting up data
DECLARE @t TABLE
(
section int,
number int,
id int
)
insert into @t
values(1,1,1),
(1,2,1),
(1,3,2),
(1,4,1),
(2,5,1),
(2,6,2),
(2,7,1),
(2,8,1)
--Query
;WITH cte
AS (
SELECT SECTION,
number,
DR = number - DENSE_RANK() OVER(ORDER BY number)
FROM @t
WHERE id <> 2
GROUP BY SECTION,
number
)
SELECT SECTION,
STUFF(
(
SELECT ', '+CASE
WHEN MIN(number) <> MAX(number)
THEN CAST(MIN(number) AS VARCHAR(MAX))+'-'+CAST(MAX(number) AS VARCHAR(MAX))
ELSE CAST(MAX(number) AS VARCHAR(MAX))
END
FROM cte
WHERE SECTION = Results.SECTION
GROUP BY SECTION,
DR FOR XML PATH(''), TYPE
).value('(./text())[1]', 'VARCHAR(MAX)'), 1, 2, ''
) AS Items
FROM cte Results
GROUP BY SECTION;
您可以使用CTE和密度等级来实现这一点:
--setting up data
DECLARE @t TABLE
(
section int,
number int,
id int
)
insert into @t
values(1,1,1),
(1,2,1),
(1,3,2),
(1,4,1),
(2,5,1),
(2,6,2),
(2,7,1),
(2,8,1)
--Query
;WITH cte
AS (
SELECT SECTION,
number,
DR = number - DENSE_RANK() OVER(ORDER BY number)
FROM @t
WHERE id <> 2
GROUP BY SECTION,
number
)
SELECT SECTION,
STUFF(
(
SELECT ', '+CASE
WHEN MIN(number) <> MAX(number)
THEN CAST(MIN(number) AS VARCHAR(MAX))+'-'+CAST(MAX(number) AS VARCHAR(MAX))
ELSE CAST(MAX(number) AS VARCHAR(MAX))
END
FROM cte
WHERE SECTION = Results.SECTION
GROUP BY SECTION,
DR FOR XML PATH(''), TYPE
).value('(./text())[1]', 'VARCHAR(MAX)'), 1, 2, ''
) AS Items
FROM cte Results
GROUP BY SECTION;
你试过光标或循环吗?这样看起来应该很简单。你试过光标或循环吗?看起来那样应该很容易。