【问题标题】:SQL order by but repeat crescent numbersSQL 排序但重复新月数字
【发布时间】:2017-07-15 00:34:04
【问题描述】:

我使用的是 SQL Server 2014,但查询时遇到问题。
我在下面有这种情况:

| Number | Series |  Name   |
|--------|--------|---------|
|   9    |   1    | Name 1  |
|   5    |   3    | Name 2  |
|   8    |   2    | Name 3  |
|   7    |   3    | Name 4  |
|   0    |   1    | Name 5  |
|   1    |   2    | Name 6  |
|   9    |   2    | Name 7  |
|   3    |   3    | Name 8  |
|   4    |   1    | Name 9  |
|   0    |   1    | Name 10 |

我需要像这样按系列列对其进行排序:

| Number | Series | Name    |  
|--------|--------|---------|  
|   9    |   1    | Name 1  |  
|   8    |   2    | Name 3  |  
|   5    |   3    | Name 2  |  
|   7    |   1    | Name 5  |  
|   1    |   2    | Name 6  |  
|   0    |   3    | Name 4  |  
|   4    |   1    | Name 9  |  
|   9    |   2    | Name 7  |  
|   3    |   3    | Name 8  |  
|   0    |   1    | Name 10 |

实际上,“系列”列中的顺序比顺序更重要。

1,2,3 又是 1,2,3...

有人可以帮助我吗?

【问题讨论】:

  • 您使用的是哪个 DBMS?
  • 抱歉,我使用的是 SQL Server 2014

标签: sql sql-order-by


【解决方案1】:

您可以使用 ANSI 标准函数 row_number()

select number, series, name
from (select t.*, row_number() over (partition by series order by number) as seqnum
      from t
     ) t
order by seqnum, series;

这会将“1”分配给每个系列的第一条记录,将“2”分配给第二条记录,依此类推。外部order by 然后将所有“1”放在一起,将所有“2”放在一起。这具有交错系列值的效果。

【讨论】:

  • @Pரதீப்。 . .现在应该。我为 order by 输入了错误的第二个键。
  • 它对我有用,我只将 partition 子句中的 orderby 列更改为“name”,我得到了预期的结果。非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-24
相关资源
最近更新 更多