0

私はプロジェクトに取り組んでいますが、奇妙な要件があります。

Aフィールドのあるテーブルがあります(TechID(Primary Key), Orders (INTEGER NUMBER),Name (Varchar))

の値は次のOrdersようになります。私のタスクは、フィールド0, 1, 2, 3, .......順にテーブルの内容を表示することです。フィールドの値がOrdersである行が最初に表示され、次に残りの行が表示されます。値がの行は最後に表示する必要があります。すべてのフィールドの値が0の場合、フィールドごとにテーブルを並べ替える必要があります。Orders10OrdersTechID

これを達成するためのアイデアはありますか?これはSQLクエリで実現できますか、それともこのためのT-Sqlスクリプトを作成する必要がありますか?

4

4 に答える 4

9

それは簡単なことです:

select *
from A
order by case Orders     -- 1. Orders values
           when 0 then 2 --    of zero collate after
           else        1 --    non-zero Orders values
         end ,           --
         Orders ,        -- 2. Then collate by Orders value proper
         TechID          -- 3. Then by TechID
于 2012-09-17T18:25:01.817 に答える
3

実際にはテストしませんでしたが、この一般的な考え方は機能するはずです。

SELECT * FROM A
ORDER BY
    CASE Orders WHEN 0 THEN 2147483647 ELSE Orders END,
    TechID

注:これは、を前提Ordersとしていintます。bigint代わりに9,223,372,036,854,775,807を使用する場合。

于 2012-09-17T18:23:11.753 に答える
1

ORDERBY句でcaseステートメントを使用します。すべてのOrders値が0の場合、TechIDによる2次ソートは、TechIDによるソートの要件を処理します。

SELECT *
FROM A
ORDER BY
   Case
      When (Orders = 0) Then 9999
      Else   Orders
   End,
   TechID
于 2012-09-17T18:21:57.493 に答える
0

オラクル以外のデータベースで動作するかどうかわからない

SELECT * FROM TORDERBY注文nullが最後に

于 2012-09-17T18:50:26.697 に答える