Sql 动态分组
我想以一种特殊的方式对我的变量进行分组 我的数据:蓝色列是ID,红色是我的数据布局,绿色是我想要的输出 它将所有A分组在B之前,然后将所有B分组在下一个A之前,然后将C分组 这是针对一个ID完成的,我希望所有ID都是如此。每个ID的信息都是动态的,SQL表表示无序集。除非列明确指定排序,否则不会对行进行排序。让我假设这样一列存在 您希望确定组,然后将它们组合在一起。一种简单的方法是使用lag确定发生更改的位置,然后在发生更改时获取值:Sql 动态分组,sql,sql-server,sql-server-2012,Sql,Sql Server,Sql Server 2012,我想以一种特殊的方式对我的变量进行分组 我的数据:蓝色列是ID,红色是我的数据布局,绿色是我想要的输出 它将所有A分组在B之前,然后将所有B分组在下一个A之前,然后将C分组 这是针对一个ID完成的,我希望所有ID都是如此。每个ID的信息都是动态的,SQL表表示无序集。除非列明确指定排序,否则不会对行进行排序。让我假设这样一列存在 您希望确定组,然后将它们组合在一起。一种简单的方法是使用lag确定发生更改的位置,然后在发生更改时获取值: select col from (select t.*,
select col
from (select t.*,
lag(col) over (partition by id order by ??) as prev_col
from t
) t
where prev_col is null or prev_col <> col;
这个??是指定排序的列。在over子句中,我应该有一个partition by子句。如果我有多个IDEA,我只是将ID放在order by子句中,我检查了大约6到7个ID。谢谢你给我看这个logic@RyanGomes . . . 这并不能保证有效。如果这很重要,那么您需要一个列来指定顺序。表表示无序集这一事实非常重要,如果忽略这一简单事实,您只会遇到错误和挫折。因此,到目前为止,这对我的数据有效。我通过对每个ID使用行数函数来控制排序