我的查询;
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
我想用'case'命令订购最后3个字符,再订购前2个字符。我不能用case左右命令。请帮助我...谢谢。.
答案 0 :(得分:2)
嗯。如果我理解正确,您想基于前五个字符(或可能是前两个-不清楚)按最小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
答案 1 :(得分:2)
我建议您只按当前排序的第二级顺序降序,其余的保持不变:
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 :(得分:0)
在uploadImages()
中将SUBSTRING()
与PATINDEX()
一起使用会有所帮助:
ORDER BY