SQL Server 根据行值对不相关的记录进行分组

Flat_Cap_Hat

如何对重复记录进行分组?

我有一列表示记录是开始、结束还是详细记录。详细记录是在开始记录之后和结束记录之前存在的记录。

我想将这些记录与唯一标识符组合在一起,以便每次有结束记录时,下一系列记录都会获得一个新的组 ID。

我已经尝试了一系列自连接、子查询和 cte,但没有构建自定义函数、视图或 CTE,我希望在单个选择查询中构建它。

非常感谢任何建议或指示。

解决方案前的示例:

--------------------------------------------------
| ID      | RecordType    |  SomeValue
--------------------------------------------------
|001      | Start record  |  some header info
|002      | Detail Record |  value
|003      | Detail Record |  value
|004      | Detail Record |  value
|005      | End Record    |  some other header info
|006      | Start Record  |  some header info
|007      | Detail Record |  Value
|008      | End  Record   |  some other header info

我试图实现的目标:

------------------------------------------------------------------
| ID      | RecordType    |  SomeValue             | RecordGroup
------------------------------------------------------------------
|001      | Start record  |  some header info      | 001
|002      | Detail Record |  value                 | 001
|003      | Detail Record |  value                 | 001
|004      | Detail Record |  value                 | 001
|005      | End Record    |  some other header info| 001
|006      | Start Record  |  some header info      | 002
|007      | Detail Record |  Value                 | 002
|008      | End  Record   |  some other header info| 002
萨尔曼

您可以使用该LAG功能并运行SUM. 以下假设没有分区并且行按 ID 排序:

SELECT ID, RecordType, SomeValue,
       SUM(chg) OVER (ORDER BY ID) AS grp
FROM (
    SELECT ID, RecordType, SomeValue,
           CASE WHEN LAG(RecordType) OVER (ORDER BY ID) IN ('Start record', 'Detail Record') THEN 0 ELSE 1 END AS chg
    FROM t
) cte1

DB Fiddle 上的演示

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用SQL Server对行值进行分组?

来自分类Dev

在SQL Server的其他服务中选择不相关的mobileNO

来自分类Dev

SQL Server:根据记录的值返回列名

来自分类Dev

根据sql server中的值消除记录

来自分类Dev

如何编写附加不相关行的SQL查询?

来自分类Dev

SQL Server查询以使用重复值对记录进行分组和排名

来自分类Dev

SQL Server:根据条件设置行值

来自分类Dev

SQL SERVER-按n分钟间隔对记录进行分组

来自分类Dev

SQL Server:基于记录相关值的表联接

来自分类Dev

根据SQL Server中的特定条件对行进行分组

来自分类Dev

根据SQL Server中的两列对数据进行分组

来自分类Dev

来自不相关表的SQL视图

来自分类Dev

SQL Server:根据TVP表的值删除表中的记录

来自分类Dev

SQL Server时间相关

来自分类Dev

SQL Server相关查询

来自分类Dev

SQL Server分组

来自分类Dev

SQL Server多个分组

来自分类Dev

与SQL Server的尴尬分组

来自分类Dev

Concat记录SQL Server

来自分类Dev

链接的 SQL Server 记录

来自分类Dev

SQL Server中的SUM分组表行值

来自分类Dev

基于SQL Server中的条件行分组的列值相乘

来自分类Dev

Transact-SQL:如果数据不相关,则获取查找值的ID

来自分类Dev

通过优化对SQL Server进行分组

来自分类Dev

通过在SQL Server中分组进行排序

来自分类Dev

SQL Server-与随机值相关吗?

来自分类Dev

SQL Server:重复值

来自分类Dev

SQL Server SUM(值)

来自分类Dev

SQL Server:连接值