如何在分组时强制SQL Server Group By尊重列顺序?

J C*_*per 2 sql sql-server sql-server-2005 gaps-and-islands

我正在使用SQL Server 2005.

关于坏桌设计,请看这篇文章的结尾.

我有两列.我想按照第二列的顺序在第一列分组.微软文档声明GROUP BY子句不关心顺序,我该如何强制执行?

这是我的伪查询:

SELECT col_1,
       MIN(col_2),
       MAX(col_2)
FROM someTable
GROUP BY col_1 (*** WITH RESPECT TO ORDER OF col_2***)
Run Code Online (Sandbox Code Playgroud)

如果我在下表中运行查询:

Col_1    Col_2
A       1
A       2
A       3
B       4
C       5
C       6
B       7
A       9
Run Code Online (Sandbox Code Playgroud)

我应该得到以下结果:

Col_1  Min   Max
A      1     3
B      4     4
C      5     6
B      7     7
A      9     9
Run Code Online (Sandbox Code Playgroud)

关键部分是我不能在结果集中将A的所有4条记录集中在一起.当查询表/子查询时,它按col_2排序,col_1的每个新实例都应该导致新的分组.谢谢,我找不到任何相关内容.

我可以做NOTHING与表的设计.这是一个由外部供应商创建的表,该表与其专有软件一起使用.我再说一遍,我对表设计无能为力!!!!

Mar*_*ith 8

;WITH T
     AS (SELECT Col1,
                Col2,
                DENSE_RANK() OVER (ORDER BY Col2) - 
                   DENSE_RANK() OVER (PARTITION BY Col1 ORDER BY Col2) AS G
         FROM   YourTable)
SELECT Col1,
       MIN(Col2) AS [Min],
       Max(Col2) AS [Max]
FROM   T
GROUP  BY Col1,
          G
ORDER  BY [Min] 
Run Code Online (Sandbox Code Playgroud)

  • +1此外,如果Col2中可能存在重复项(OP没有说一个,但暗示没有重复项),那么这可能会中断.`Rank()`或`dense_rank()`而不是`row_number()`会处理这种情况和重复的情况. (2认同)