如果 SQL 服务器中只有序列形式,我想计算名称列中的值
I want to count values in name column if there are only in sequence form in SQL Server
create table #t (Id int, Name nvarchar(max))
insert into #t
values (1, 'ABC'), (2, 'ABC'), (3, 'BBB'), (4, 'BBB'),
(5, 'BBB'), (6, 'BBB'), (7, 'CCC'), (8, 'BBB'),
(9, 'BBB'), (10, 'ABC')
如果只有序列形式,我想统计名称列中的值
我如何获得此结果,如下面 table 所示:
| Name | Repetition |
('ABC'), 2
('ABC'), 2
('BBB'), 4
('BBB'), 4
('BBB'), 4
('BBB'), 4
('CCC'), 1
('BBB'), 2
('BBB'), 2
('ABC'), 1
试试这个多 cte 解决方案:
;with name_change as (
select *, case when name=lag(name, 1) over (order by id) then 0 else 1 end as indicator
from t
), name_group as (
select name, sum(indicator) over (order by id) as g
from name_change
)
select name, count(name) over (partition by g) from name_group
尽管不确定效率如何,但我认为它可以满足您的需求...
您也可以尝试像下面这样计算连续行的间隙和孤岛类型方法
select
Name,
Repetition= count(1) over( partition by r,Name )
from
(
select
*,
r=id-row_number() over(partition by Name order by Id)
from #t
) t
order by id
create table #t (Id int, Name nvarchar(max))
insert into #t
values (1, 'ABC'), (2, 'ABC'), (3, 'BBB'), (4, 'BBB'),
(5, 'BBB'), (6, 'BBB'), (7, 'CCC'), (8, 'BBB'),
(9, 'BBB'), (10, 'ABC')
如果只有序列形式,我想统计名称列中的值 我如何获得此结果,如下面 table 所示:
| Name | Repetition |
('ABC'), 2
('ABC'), 2
('BBB'), 4
('BBB'), 4
('BBB'), 4
('BBB'), 4
('CCC'), 1
('BBB'), 2
('BBB'), 2
('ABC'), 1
试试这个多 cte 解决方案:
;with name_change as (
select *, case when name=lag(name, 1) over (order by id) then 0 else 1 end as indicator
from t
), name_group as (
select name, sum(indicator) over (order by id) as g
from name_change
)
select name, count(name) over (partition by g) from name_group
尽管不确定效率如何,但我认为它可以满足您的需求...
您也可以尝试像下面这样计算连续行的间隙和孤岛类型方法
select
Name,
Repetition= count(1) over( partition by r,Name )
from
(
select
*,
r=id-row_number() over(partition by Name order by Id)
from #t
) t
order by id