3

さて、私は以前に似たようなことを尋ねましたが、私はそれを調査しましたが、これを具体的に見つけていません。OptionName(NVarChar)フィールドとIsActive(BIT)フィールドでソートする必要のあるテーブルがあります。

DDLの場合、結果は次の順序である必要があります。

Option A
Option B
Option C
Options that are Active, by OptionName ASC 
Option D
Options that are Inactive, by OptionName ASC 

これまでのところ私は

ORDER BY CASE WHEN PortalName = 'Company, Inc' THEN 0 ELSE 1 END,
         CASE WHEN PortalName = 'Setup' THEN 1 ELSE 2 END,
         CASE WHEN PortalName = 'Daily Routine' THEN 2 ELSE 3 END,
         CASE WHEN IsActive = 1 THEN 3 ELSE 4 END, 
         CASE WHEN PortalName = 'Master Option' THEN 4 ELSE 5 END,
         PortalName ASC

しかし、これは結果を次のように返します。

Option A
Option B
Option C
Option D
Options that are Active, by OptionName ASC 
Options that are Inactive, by OptionName ASC 

どんな助けでも素晴らしいでしょう!

4

3 に答える 3

2

試す、

ORDER BY CASE WHEN PortalName = 'Company, Inc' THEN 0 
              WHEN PortalName = 'Setup' THEN 1 
              WHEN PortalName = 'Daily Routine' THEN 2 
              WHEN IsActive = 1 THEN 3 
              WHEN PortalName = 'Master Option' THEN 4 
         ELSE 5 END,
         PortalName ASC
于 2012-11-02T13:19:50.130 に答える
1

order by の各部分を異なる列と見なします... 各コンポーネントにケースを適用します。最初に最初の部分を取得し、次に 2 番目の部分を取得します。2番目の部分に当てはまらない場合は、常に同じ値にしてください...次のような...

ORDER BY 
  CASE WHEN PortalName = 'Company, Inc' THEN 1
       WHEN PortalName = 'Setup' THEN 2
       WHEN PortalName = 'Daily Routine' THEN 3
       WHEN PortalName = 'Master Option' THEN 4 ELSE 5 END,
  CASE WHEN IsActive = 1 THEN 1 ELSE 2 END,
  PortalName ASC
于 2012-11-02T13:45:22.410 に答える
-1

答えを得た: CASE WHEN PortalName = 'Master Option' THEN 9999 ELSE 5 END

于 2012-11-02T20:42:15.903 に答える