求连续出现的值和次数

ftfox_2000 2019-01-04 12:41:15
USE tempdb
GO
IF OBJECT_ID('t') IS NOT NULL DROP TABLE t
GO
CREATE TABLE t(
id int,
[name] NVARCHAR(10),

)
GO
SET NOCOUNT ON
INSERT INTO t VALUES (1,'A')
INSERT INTO t VALUES (2,'A')
INSERT INTO t VALUES (3,'A')
INSERT INTO t VALUES (6,'B')
INSERT INTO t VALUES (7,'A')
INSERT INTO t VALUES (8,'A')

要结果 name counts column1 coloum2
A 2 3 2
B 1 2
...全文
231 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
ftfox_2000 2019-01-16
  • 打赏
  • 举报
回复
分给错人了。。。。。。
Dear SQL(燊) 2019-01-04
  • 打赏
  • 举报
回复
引用 3 楼 砸死牛顿的苹果 的回复:
好像是彩票一类的问题
是哦,我天天买彩票都没有想起
  • 打赏
  • 举报
回复
好像是彩票一类的问题
Dear SQL(燊) 2019-01-04
  • 打赏
  • 举报
回复
如是sql server 不是 2012+,用left join on rid=rid-1得到lead值
Dear SQL(燊) 2019-01-04
  • 打赏
  • 举报
回复

USE tempdb
GO
IF OBJECT_ID('t') IS NOT NULL DROP TABLE t
GO
CREATE TABLE t(
    id int,
    [name] NVARCHAR(10),
    
)
GO
SET NOCOUNT ON
INSERT INTO t VALUES (1,'A')
INSERT INTO t VALUES (2,'A')
INSERT INTO t VALUES (3,'A')
INSERT INTO t VALUES (6,'B')
INSERT INTO t VALUES (7,'A')
INSERT INTO t VALUES (8,'A')

;
with list as(
	select *,rid=row_number ( ) OVER (order by id),lead_name=lead(name)over(order by id)
	from t
)
select [name]
	,counts=count(*)over(partition by name)
	,[column]=rid-isnull(lag(rid)over(order by id),0)
from list
where name<>isnull(lead_name,'')

name       counts      column
---------- ----------- --------------------
A          2           3
B          1           1
A          2           2

行转参考:https://bbs.csdn.net/topics/392504654

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧