sql - 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 中使用左右命令。请帮助我......谢谢......
解决方案
嗯。如果我理解正确,您想根据前五个字符(或者可能是前两个字符 - 不清楚)按最小 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
推荐阅读
- ios - 为什么动态添加内容时滚动视图不可能滚动。?
- javascript - 如何修复 ajax 调用,以便我可以隐藏我的令牌?
- python - Django 中的“输入文件”出错。无法识别文件
- angular - 如何在无线电组更改之前获取无线电值?
- c# - 如何修复 InvalidOperationException:无法在线程中使用 Freezable System.Windows.Shell.WindowChrome,因为它们不能被冻结
- django - 用户登录后如何在导航栏中的登录链接上显示用户名
- laravel - 我正在尝试在 Laravel 中添加关系。它自己加入一对多关系
- android - Android ProGuard androidx 保持受保护的方法,但发布是公开的
- php - 为什么 ImageColorSet() 在 PHP 中不起作用?
- php - 如何在php中更改json数组格式?