Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 动态分组_Sql_Sql Server_Sql Server 2012 - Fatal编程技术网

Sql 动态分组

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.*,

我想以一种特殊的方式对我的变量进行分组

我的数据:蓝色列是ID,红色是我的数据布局,绿色是我想要的输出

它将所有A分组在B之前,然后将所有B分组在下一个A之前,然后将C分组

这是针对一个ID完成的,我希望所有ID都是如此。每个ID的信息都是动态的,SQL表表示无序集。除非列明确指定排序,否则不会对行进行排序。让我假设这样一列存在

您希望确定组,然后将它们组合在一起。一种简单的方法是使用lag确定发生更改的位置,然后在发生更改时获取值:

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使用行数函数来控制排序