当前位置: 首页 > 知识库问答 >
问题:

SQL列特定数据的自定义顺序

景元徽
2023-03-14

我有一个表格,例如如下:

+-------+------+---------+---------+
| Col1  | col2 | values1 | values2 |
+-------+------+---------+---------+
| item1 | A4   |       5 |      87 |
| item1 | A1   |       5 |      11 |
| item1 | A2   |       5 |      25 |
| item1 | A3   |       5 |      33 |
| item1 | A5   |       0 |      18 |
| item2 | A4   |      12 |      72 |
| item2 | A1   |       6 |      12 |
| item2 | A2   |       6 |      26 |
| item2 | A3   |       6 |      34 |
| item2 | A5   |       6 |      35 |
+-------+------+---------+---------+

我想在特定条件下对上述数据进行排序,例如:按升序对值s2的数据进行排序,其中col2=A5,这意味着数据应按正常顺序进行排序,但如果col2='A5',则值s2的顺序应为升序或降序的行应排在第一位,如下所示。

+-------+------+---------+---------+
| Col1  | col2 | values1 | values2 |
+-------+------+---------+---------+
| item1 | A1   |       5 |      11 |
| item1 | A2   |       5 |      25 |
| item1 | A3   |       5 |      33 |
| item1 | A4   |       5 |      87 |
| item2 | A5   |       6 |      35 |
| item2 | A1   |       6 |      12 |
| item2 | A2   |       6 |      26 |
| item2 | A3   |       6 |      34 |
| item2 | A4   |      12 |      72 |
| item1 | A5   |       0 |      18 |
+-------+------+---------+---------+

col2='A5'中的数据应根据列values2的值按升序或降序排列。这能实现吗?

具体来说,让我们只进行col2排序。如果我按col2下单。行将按A1、A2、A3、A4、A5排序,而不依赖于col值2。我的问题是,当列values2的最大值位于A5行的col2的A5数据的顺序应该在降序中先出现,然后是较小的,

在这里,我们假设我点col2。我们有两个数据与A5。

| item1 | A5   |       0 |      18 | 

| item2 | A5   |       6 |      35 |

因此,第二个值应排在第一位,因为列values2的值较高。“先到”并不意味着它应该在顶部,但我的意思是它应该在A4之后,但根据col2=A5的values2值,较高的值应该在A4之后。

**编辑了要求。

共有1个答案

百里京
2023-03-14

您可以尝试使用具有两级排序的ORDER BY子句:

SELECT Col1, col2, values1, values2
FROM yourTable
ORDER BY
    CASE WHEN col2 = 'A5' THEN 0 ELSE 1 END,
    values2 DESC;

这将首先放置col2='A5'的所有记录,然后是所有其他记录。在这两个组中,第二个条件按值2降序排序。

注:自我最初回答以来,OP已经多次更改了他的问题。最初的问题是如何先对col2='A5'的记录进行排序,然后再对所有其他记录进行排序。

 类似资料:
  • 问题内容: 我有以下问题。我有三个类,A,B和C。A包含一个与B:s相关的一对一列表。B包含与C的ManyToOne关系。C包含一个名为“名称”的字段,B也包含一个名为“名称”的字段。我要完成的工作是让A列表中的项目主要按C的名称排序,然后按B的名称排序- 问题是我不知道该怎么做。可能吗? 我使用EclipseLink作为我的JPA提供程序。 编辑是,我尝试了不同的变体,例如@OrderBy(“

  • Nutz.Dao 提供了大多数简单的操作,在80%以上的情况下,你并不需要编写 SQL,因为 Nutz.Dao 会自动替你 生成可以使用的 SQL。但是,在某些特殊的情况下,尤其是考虑到效率等问题,直接写作 SQL 仍然是程序员们 的一个杀手锏,有了这个杀手锏,程序员们永远可以针对任何数据库做他们想要的任何操作。 在之前的时代,很多程序员将 SQL 代码同 Java 代码混杂在一起,即所谓的硬编码

  • 问题内容: 我有这样的自定义订购需求: 我曾经想过用3个不同的选择查询的帮助下结合和。但是,我不能这样做,因为必须 在 和 之前 使用。 如何进行选择(或多个选择)以实现上面的自定义排序? 另一个解决方法可能会有所帮助,就是使此选择查询中返回的 第一条记录 成为最后一条记录,但是如何? 问题答案: 试试这个: 1亿个常量必须大于N。 这是一个简单的演示

  • 有没有一种方法可以使用Jackson JSON处理器来执行自定义字段级别的序列化?例如,我想让 注意,age=25被编码为数字,而favoritenumber=123被编码为字符串。Jackson将编组为一个数字。在这种情况下,我希望将favoriteNumber编码为字符串。

  • 我有这张桌子: 我需要创建一个customorderID列,其显示如下: 行按ID排序 有人能帮我吗?

  • 本节介绍如何管理数据库对象,包括数据库和表。以下是SQL Server数据库常用的一些数据定义: 创建表 - 演示如何在数据库的特定模式中创建新表。 标识列 - 了解如何使用属性为表创建标识列。 向表添加列 - 演示如何将一个或多个列添加到现有表 修改列 - 演示如何更改表中现有列的定义。 删除列 - 演示如何从表中删除一个或多个列。 删除表 - 演示如何从数据库中删除表。 截断表 - 演示如何更