6

ORDER BYMySQL. 我必须按 3 个标准对表格进行排序

1 - 首先我想按TYPE_OF_WORK排序,所以所有数据都必须按字母顺序排列,比如

dech_rap_bus
dech_rap_bus
ger_dem_dech_bus
ger_dem_dech_bus
ger_dem_stp_pp
...

结果 => 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  

结果 => http://sqlfiddle.com/#!2/b2a858/7

所以12工作得很好。

3 - 在此之后我想按列not_existing排序

结果 => http://sqlfiddle.com/#!2/b2a858/5

我不知道它到底做了什么,但我看不到任何结果......我只是想要那个

dec_rap_bus V300

其中NOT_EXISTING列是1放在最后,什么时候有更多NOT_EXISTING = 1来对它们进行排序,但在表的末尾。

我对自己说,2 个选择的 UNION 会帮助我

/* 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

这是为什么?我只想合并两个选择结果,我做错了什么?

4

3 回答 3

2

这不是给你你想要的吗?

http://sqlfiddle.com/#!2/b2a858/26

先按 not_existing 排序?

这里有什么问题?你有你的排序,但最后有 not_existing 记录 - 这些也以相同的方式排序

于 2012-08-07T12:20:09.683 回答
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;
于 2012-08-07T12:22:35.687 回答
1

如果你这样做

order by 
 (case when not_existing is null then 0 else not_existing end) desc
,type_of_work ASC,
project_version ASC

它会先出现。

您的查询没有排序,因为您对 dec_rap_bus 有不同的项目值

TYPE_OF_WORK    PROJECT_VERSION 
dech_rap_bus    V123-V1234  
dech_rap_bus    V300
于 2012-08-07T12:23:00.803 回答