将顶部单行添加到查询的有序结果集

5 sql sql-server-2008

我有一个非常简单的要求.

SELECT NULL as ProjectId, 'All' as ProjectName

UNION

(
  SELECT  Project.ProjectId,  Project.ProjectName
  FROM Project Order by 2
)
Run Code Online (Sandbox Code Playgroud)

原始订单顺序:

ProjectId       ProjectName     
 24               Beta           
 56               Alpha          
 57               Gamma          
 120              Aap            
Run Code Online (Sandbox Code Playgroud)

预期结果集:

ProjectId      ProjectName         
______________________________
NULL           All                 
120            Aap                 
56             Alpha               
24             Beta                
57             Gamma              
Run Code Online (Sandbox Code Playgroud)

我需要的:我想在查询的有序结果集之上添加一行

问题:

  1. Subquerys不允许具有Order By子句
  2. 执行前100%会破坏订单,而拥有"全部"的行不会排在最前面
  3. 声明一个Table变量按顺序插入所有条目,然后在该表上执行union,即

     Select NULL as ProjectId, 'All' as ProjectName...
      UNION
     select * from @myTable
    
    Run Code Online (Sandbox Code Playgroud)

    再次摧毁秩序

请帮帮我

Nik*_*vić 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
Run Code Online (Sandbox Code Playgroud)

注意我用UNION ALL替换了UNION,因为您不需要DISTINCT结果集.