我有一个SQL查询,我需要用它来订购一个字段。通常,在hibernate
中查询会是这样的通过model.field1,model.field2从模型顺序中选择* 问题是第一种需要按照特定的顺序进行。
必须以特定顺序过滤field1中的订单。
因此,不是按字母顺序列出汽车,例如。我更愿意说 雷克萨斯,福特,丰田,马自达,梅赛德斯等。有这么干净的方法吗?目前我得到了结果,然后必须把它放在特定的列表中,并且不是很干净。我没有选择修改数据库中的东西
感谢。
答案 0 :(得分:1)
您可以使用CASE语句创建自定义ORDER BY
CASE语句检查您的条件,并为符合该条件的行分配的值低于分配给不符合条件的行的值。
在给出一个例子时,最容易理解的是:
SELECT mycolumn
FROM model
ORDER BY CASE WHEN model.field1 = 'Lexus' THEN 0
WHEN model.field1 = 'Ford' THEN 1
WHEN model.field1 = 'Toyota' THEN 2
WHEN model.field1 = 'Mazda' THEN 3
WHEN model.field1 = 'Mercedes' THEN 4 END, model.field2;
答案 1 :(得分:1)
order by (case
when field1 = 'Lexus' then 1
when field1 = 'Ford' then 2
when field1 = 'Toyota' then 3
...
else null end)
答案 2 :(得分:0)
您需要使用窗口函数和PARTITION BY子句,如下所示:
SELECT ROW_NUMBER() OVER(PARTITION BY manufacturer ORDER BY field1) [RN],
manufacturer,
field1,
field2
FROM model
这将根据此示例中field1的顺序为partition by子句中的每个不同分组提供行号。
编辑:
如果您的RDMS不支持窗口功能,您可以按制造商订购第二个值 - 这会将每个制造商的所有行“组合”在一起:
SELECT manufacturer, field1
FROM model
ORDER BY manufacturer, field1