4

私は次のクエリを持っています:

SELECT id, title, adcontent, adtargetURL, locationpage, 
locationarg, locationid, displayorder, visible, schedstart, 
schedstop, created, modified, createdby, modifiedby
FROM ads            
ORDER BY locationpage, locationarg, locationid, title 

次の方法でフィールドを並べ替える必要があります。

  • 最初に「all」の値を持つフィールドを使用してロケーションページで並べ替え、次に残りを昇順で並べ替えます
  • 次に、最初にNULLまたは空の文字列値を指定したlocationargを使用し、残りをascに入力します。
  • 次に、最初にNULLまたは0の値を持つlocationidによって、残りはascにあります
  • その中で、最初に「1」、次にNULL、次に「2」の表示順序で並べ替えます。
  • そして最後に、それらのいずれかがすべて同じである場合は、ASCのタイトルで

これを達成するために、ORDER BYはどのように見えるべきですか?

これが私がこれまでに持っているものです:(以下から更新)

ORDER BY locationpage='all', 
         locationpage ASC, 
         locationarg ASC, 
         locationid ASC, 
         displayorder='1', 
         ISNULL(displayorder), 
         displayorder='2', 
         title ASC

...しかし、これは機能していません!

4

2 に答える 2

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
于 2012-10-05T13:30:21.083 に答える
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;
于 2012-10-05T13:35:21.023 に答える