sql - 将单行顶部添加到查询的排序结果集中

标签 sql sql-server-2008

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

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              

我需要什么:我想在查询的有序结果集顶部添加一行

问题:
  • 子查询不允许具有Order By子句
  • 执行前100%会破坏订单,并且具有“全部”的行不会排在最前面
  • 声明一个Table变量,按顺序插入所有条目,然后对该表执行并集
    IE。
     Select NULL as ProjectId, 'All' as ProjectName...
      UNION
     select * from @myTable
    

    再次破坏订单

  • 请帮帮我

    最佳答案

    您可以订购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
    

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

    关于sql - 将单行顶部添加到查询的排序结果集中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10241993/

    相关文章:

    php - MySQL - 如果午夜过去了,则获取昨天的数据

    SQL:检查数组中是否至少有一个元素在子查询中

    sql - 如何加速涉及 count(distinct()) 的 SQL Server 查询

    sql-server - 链接服务器插入选择性能

    sql - 在存储过程中构建动态 WHERE 子句

    sql-server-2008 - 替代使用 WHERE ... IN (...) 进行慢速 SQL 查询

    sql - 在 Informix 中将整数转换为 bool 值

    sql - SQL 中的 ORDER BY

    java - 基于时间戳列上的日期的 HQL 查询?

    sql - 组合 GROUP BY 和 ROW_NUMBER()