SQL - Использование определенной команды 'order by' - PullRequest
1 голос
/ 07 июня 2019

Мой запрос;

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 символам и упорядочить по первым 2 символам командой 'case'. Я не могу использовать команду влево-вправо с case. Пожалуйста, помогите мне ... Спасибо ..

Ответы [ 3 ]

2 голосов
/ 07 июня 2019

Я бы посоветовал вам просто заказать убывание на втором уровне вашей текущей сортировки, оставив все то же самое:

ORDER BY
    CASE WHEN IsEmriNo LIKE '%OC%' THEN 0
         WHEN IsEmriNo LIKE '%SB%' THEN 1
         WHEN IsEmriNo LIKE '%MR%' THEN 2 END,
    IsEmriNo DESC;

На самом деле вы можете вместо этого просто id DESC, но, возможно, этоэто совпадение, что столбцы id и IsEmriNo упорядочены одинаково.

2 голосов
/ 07 июня 2019

Хммм.Если я правильно понимаю, вы хотите упорядочить по минимальному идентификатору исходя из первых пяти символов (или, возможно, первых двух - не понятно).Затем по убыванию 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
0 голосов
/ 07 июня 2019

Использование SUBSTRING() с PATINDEX() в ORDER BY поможет:

SELECT IsEmriNo, Ozellik, ID
FROM TableName 
ORDER BY SUBSTRING(IsEmriNo, 1, PATINDEX('%[0-9]%', IsEmriNo) - 1) DESC, 
         SUBSTRING(IsEmriNo, PATINDEX('%[0-9]%', IsEmriNo), LEN(IsEmriNo)) ASC
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...