首页 > 解决方案 > SQL - 使用特定的“order by”命令

问题描述

我的查询;

select *
from
(
    Select distinct Siparisler.IsEmriNo,MakinelerVeParcalar.Ozellik,DurumBilgisi.ID
    from Siparisler,MakinelerVeParcalar,DurumBilgisi Where DurumBilgisi.ID = MakinelerVeParcalar.ID and Siparisler.IsEmriNo = MakinelerVeParcalar.IsEmriNo
) x
order by
    case when IsEmriNo LIKE '%OC%' then 0
         when IsEmriNo LIKE '%SB%' then 1
         when IsEmriNo LIKE '%MR%' then 2 end,
    IsEmriNo

我的输出;

IsEmriNo    Ozellik    ID
--------    -------    --
OC19U001    Ozel       1
OC19U002    Yok        2
OC19U003    Yok        3
SB19U001    Yok        4
SB19U002    Yok        5
MR19U001    Yok        6
MR19U002    Yok        7
MR19U003    Yok        8

但我想要;

IsEmriNo    Ozellik    ID
--------    -------    --
OC19U003    Yok        3
OC19U002    Yok        2
OC19U001    Ozel       1
SB19U003    Yok        5
SB19U002    Yok        4
MR19U003    Yok        8
MR19U002    Yok        7
MR19U001    Yok        6

我想用最后 3 个字符订购并用“case”命令订购前 2 个字符。我不能在 case 中使用左右命令。请帮助我......谢谢......

标签: sqlsql-server

解决方案


嗯。如果我理解正确,您想根据前五个字符(或者可能是前两个字符 - 不清楚)按最小 id 排序。然后由id下降。

您可以使用窗口函数执行此操作:

order by min(id) over (partition by left(IsEmriNo, 5)),
         id desc

如果您想按 中的最后两个字符排序IsEmriNo

order by min(id) over (partition by left(IsEmriNo, 5)),
         right(IsEmriNo, 2) desc

推荐阅读