我有两列名为 priority
和 state
:
priority
列将仅包含字段值:urgent
和normal
。state
列将仅包含字段值:wait
、executed
和done
。
我正在尝试使用我的 dataset CommandText
属性对这些进行排序,因此连接到数据集的 dbgrid
会按照我在那里设置的排序顺序显示数据。
排序顺序应该是这样的:
- 在
priority
列中包含urgent
的行应该启动 DBGrid 列表。 - 然后列表应该继续在
priority
列中标记为normal
的列表,
- 在
- 后面是
state
列中标记为wait
的那些, - 后面是
state
列中标记为executed
的那些, - 最后,列表以
state
列中标记为done
的那些结束。
- 后面是
我不知道如何为此编写 SQL 语句,所以我可以在数据集的 CommantText
属性中使用它。
我目前正在使用这个:
SELECT *
FROM table_name
ORDER BY FIELD(column_name, "normal", "urgent") DESC
这适用于第一列 priority
但不考虑第二列 state
。
最佳答案
你们很亲近。您只需要 order by
中的第二个键:
SELECT *
FROM table_name
ORDER BY FIELD(priority, 'urgent', 'normal'),
FIELD(state, 'wait', 'executed', 'done')
注意事项:
- 我从第一个键中删除了
DESC
。您正在使用field()
,因此请按正确的顺序排列。 - 这将通过相同的三个键来订购“紧急”。这似乎与您的问题一致。
关于mysql - 按 2 列的字段值排序 - mysql - delphi - dbgrid,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40105888/