我有以下查询:
SELECT id, title, adcontent, adtargetURL, locationpage,
locationarg, locationid, displayorder, visible, schedstart,
schedstop, created, modified, createdby, modifiedby
FROM ads
ORDER BY locationpage, locationarg, locationid, title
我需要按以下方式订购字段:
我的ORDER BY应该如何实现这一目标?
这是我到目前为止所做的:(从下面更新)
ORDER BY locationpage='all',
locationpage ASC,
locationarg ASC,
locationid ASC,
displayorder='1',
ISNULL(displayorder),
displayorder='2',
title ASC
......但这不起作用!
答案 0 :(得分:1)
您最好的选择是使用一个计算字段,根据您的规则生成订单ID。我稍后会添加一个示例..
select
case
when locationpage = "all" then 10
when ISNULL(locationarg) then 20
....
else 50
end as OrderID,
id,
title,
....
FROM ads
ORDER BY OrderID DSEC
答案 1 :(得分:0)
给这个打击:
select id, title, adcontent, adtargetURL, locationpage, locationarg, locationid, displayorder, visible, schedstart, schedstop, created, modified, createdby, modifiedby
from ads
order by case when locationpage='all' then 0 else 1 end,
locationpage,
case when locationarg is null or locationarg='' then 0 else 1 end,
locationarg ASC,
case when locationid is null OR locationid='0' then 0 else 1 end,
locationid,
case when displayorder =1 then 0 when displayorder is null then 1 when displayorder = 2 then 2 else 3 end,
title;