按2列中的字段值排序 - mysql - delphi - dbgrid

时间:2016-10-18 10:33:35

标签: mysql sql delphi sql-order-by dbgrid

我有两列名为prioritystate

  • priority仅包含字段值:urgentnormal
  • state仅包含字段值:waitexecuteddone

我正在尝试使用dataset CommandText属性对这些进行排序,因此连接到数据集的dbgrid会按照我在那里设置的排序顺序显示数据。

排序顺序应该是这样的:

    1. urgent列中包含priority的行应该启动DBGrid列表。
    2. 然后该列表应继续使用normal列中标记为priority的列表,
    1. 后跟wait列中标记为state
    2. 后跟executed列中标记为state
    3. 最后,列表以done列中标记为state的列表结束。
  1. 我无法弄清楚如何为此编写SQL语句,因此我可以在数据集的CommantText属性中使用它。

    我目前正在使用它:

    SELECT *
      FROM table_name
      ORDER BY FIELD(column_name, "normal", "urgent") DESC
    

    这适用于第一列priority,但没有考虑第二列state

1 个答案:

答案 0 :(得分:4)

你非常接近。您只需要order by中的第二个密钥:

SELECT *
FROM table_name
ORDER BY FIELD(priority, 'urgent', 'normal'),
         FIELD(state, 'wait', 'executed', 'done')

注意:

  • 我从第一个键中删除了DESC。您正在使用field(),因此请按正确顺序排列。
  • 这将通过相同的三个键来命令“紧急”。这似乎与您的问题一致。