5

非常に単純な要件があります。

SELECT NULL as ProjectId, 'All' as ProjectName

UNION

(
  SELECT  Project.ProjectId,  Project.ProjectName
  FROM Project Order by 2
)

エントリの元の順序:

ProjectId       ProjectName     
 24               Beta           
 56               Alpha          
 57               Gamma          
 120              Aap            

期待される結果セット:

ProjectId      ProjectName         
______________________________
NULL           All                 
120            Aap                 
56             Alpha               
24             Beta                
57             Gamma              

必要なもの:クエリの順序付けられた結果セットの上に単一の行を追加したい

問題:

  1. サブクエリにOrderBy句を含めることはできません
  2. トップ100パーセントを実行すると注文が破棄され、「すべて」の行がトップになりません
  3. すべてのエントリを順番に挿入し、このテーブルで結合を実行するTable変数を宣言します。

     Select NULL as ProjectId, 'All' as ProjectName...
      UNION
     select * from @myTable
    

    再び秩序を破壊する

お願い助けて

4

1 に答える 1

7

UNION の結果を並べ替えることができますが、データがどこから来たのかを識別するために追加の列を提供する必要があります - ここでは SortOrder です:

SELECT NULL as ProjectId, 'All' as ProjectName, 1 SortOrder
UNION ALL
SELECT  Project.ProjectId,  Project.ProjectName, 2 SortOrder
FROM Project
order by SortOrder, ProjectName

結果セットを DISTINCT する必要がないため、 UNION をUNION ALLに置き換えたことに注意してください。

于 2012-04-20T07:35:02.240 に答える