1

私はSQLを初めて使用します。次のソートにどのように対応しますか。

3 つの異なるタイプの開発プロジェクト (タイプ 1、2、および 3) があります。タイプ 1 とタイプ 2 には、それらにリンクされた分析もあります。分析と開発タイプ 1 および 2 には、リンクする親 ID があります。これらの仕様でどのように並べ替えますか。

次の順序でアイテムを処理します

  • 開発タイプ 3 プロジェクト
  • 開発タイプ 1 または 2 のプロジェクトとその分析項目を組み合わせたもの (開発項目の列が分析項目の列に優先します)
  • 関連する開発プロジェクトがない残りの分析プロジェクト

*編集*下位の ParentID は、これら 3 つの仕様の後に最初に来る必要があります

テーブルの列の例は次のとおりです。

|ParentID| AnalysisItemID | DevItemId | DevType |
    1          Null             2          1
    4           5              Null       Null 
    6           8              Null       Null      
    8          Null             9          3  
    6          Null             7          2
    1           3              Null       Null

ソートされた出力は次のようになります。

|ParentID| AnalysisItemID | DevItemId | DevType |
    8          Null             9          3   
    1          Null             2          1
    1           3              Null       Null
    6          Null             7          2 
    6           8              Null       Null 
    4           5              Null       Null
4

2 に答える 2

1

私には、親の最大devtypeに基づいた順序で、親IDでデータをソートしたいようです。

このためには、サマリー テーブルに参加して次の情報を取得する必要がありますorder by

select t.*
from t join
     (select parentId, max(devtype) as maxdt
      from t
      group by parentId
     ) p
     on t.parentId = p.parentId
order by (case when maxdt = 3 then 1
               when maxdt in (1, 2) then 2
               else 3
          end), parentId, devtype desc
于 2013-08-02T13:21:43.863 に答える
0

CASE見苦しいですが、SQLの a の結果で並べ替えることができます。次のようなものを想像します。

SELECT * FROM MyTable
   ORDER BY CASE WHEN DevType = 3 THEN 1
                 WHEN DevType IN (1, 2) THEN AnalysisItemID + 1
                 ELSE [bignumber] + AnalysisItemID END

あなたが必要とすることをすることができます。

明らかに、case必要に応じて、読みやすくするためにユーザー定義関数にカプセル化することもできます。ただし、パフォーマンスに影響を与える可能性があります。

于 2013-08-02T13:17:08.917 に答える