我在ORDER BY
中遇到问题MySQL
。我必须按3个标准对表格进行排序
1 - 首先我要按 TYPE_OF_WORK 排序,因此所有数据必须按字母顺序排列,例如
dech_rap_bus
dech_rap_bus
ger_dem_dech_bus
ger_dem_dech_bus
ger_dem_stp_pp
...
RESULT => http://sqlfiddle.com/#!2/b2a858/6
2秒我希望按 PROJECT_VERSION 排序,因此所有数据必须按字母顺序排列,但要遵守1个条件,例如
dech_rap_bus V123-V1234
dech_rap_bus V300
ger_dem_dech_bus V123-V1234
ger_dem_dech_bus V300
ger_dem_stp_pp V123-V1234
RESULT => http://sqlfiddle.com/#!2/b2a858/7
所以 1 和 2 工作正常。
3 - 在此之后我想按列 not_existing
进行排序RESULT => http://sqlfiddle.com/#!2/b2a858/5
我不知道它到底做了什么,但我看不到任何结果......我只想要那个
dech_rap_bus V300
其中 NOT_EXISTING 列 1 结束时, NOT_EXISTING = 1 将它们排序,但在表的末尾。
我认为2个选择的联盟会帮助我
/* Selecting all data where not_existing is not 1 or NULL ---> working good! */
(
SELECT
*
FROM
atm_mti_view
WHERE
project_function='FRS01' AND
on_big_project_id = 12 AND
(not_existing != 1 OR not_existing IS NULL)
ORDER BY
type_of_work ASC,
project_version ASC
)
UNION
/* Selecting all data where not_existing is 1 ---> working good! */
(
SELECT
*
FROM
atm_mti_view
WHERE
project_function='FRS01' AND
on_big_project_id = 12 AND
not_existing = 1
ORDER BY
type_of_work ASC,
project_version ASC
)
但是这段代码的作用是将最终不存在的dech_rap_bus放在最后,好,但它弄乱了版本排序,为什么???
在此处查看结果=> http://sqlfiddle.com/#!2/b2a858/8
为什么?我只想 MERGE 两个选择结果,我做错了什么?
谢谢。
答案 0 :(得分:2)
这不能给你你想要的东西吗?
http://sqlfiddle.com/#!2/b2a858/26
首先按not_existing排序?
这里有什么问题?你有自己的排序但最后有不存在的记录 - 这些也以相同的方式排序
答案 1 :(得分:1)
您不需要UNION
您可以通过此查询实现此目的:
SELECT *
FROM atm_mti_view
WHERE project_function='FRS01' AND
on_big_project_id = 12
ORDER BY IF(not_existing = 1, 1, 0) ASC,
type_of_work ASC,
project_version ASC;
答案 2 :(得分:1)
如果你这样做
order by
(case when not_existing is null then 0 else not_existing end) desc
,type_of_work ASC,
project_version ASC
它将首先出现。
您的查询未订购,因为您对dech_rap_bus具有不同的项目值
TYPE_OF_WORK PROJECT_VERSION
dech_rap_bus V123-V1234
dech_rap_bus V300