【问题标题】:How to keep a specific row as the first result of a query (T-SQL)?如何将特定行保留为查询的第一个结果(T-SQL)?
【发布时间】:2012-04-16 14:56:23
【问题描述】:

我正在编写一个 SQL 查询来获取 Report Builder 3.0 中报表的参数列表。我需要在结果中添加一个值为“All”的额外行,如下所示:

SELECT 'All'
UNION
SELECT DISTINCT    Manager
FROM               IS_Projects

这很好用,但查询返回按字母顺序排序的行,我实际上希望“全部”始终出现在顶部(即作为第一行返回)。其余结果可以按字母顺序排序。

我看到了有关向表中添加排序顺序列的建议,但我对 SQL 很陌生,不知道如何执行此操作。

感谢您的任何建议!

【问题讨论】:

  • 这存在于报告本身上,所以我实际上并没有以这种方式填充表格。不过感谢您的提示!
  • 啊...当我重新阅读问题并意识到这是为了报告时,我删除了我的评论!还看到了下面的简洁答案,并认为我的评论不再需要......

标签: sql tsql reportbuilder


【解决方案1】:

一种方式;

SELECT Name FROM (
    SELECT 'All'       as Name
    UNION 
    SELECT DISTINCT    Manager
    FROM               IS_Projects
) T
ORDER BY CASE Name WHEN 'All' THEN 0 ELSE 1 END, Name

【讨论】:

  • 太棒了 - 不知道您可以将 case 语句放在 ORDER BY 子句中。这只是打开了大门。它的性能相当吗?
  • 就我个人而言,我不希望像上面这样的微不足道的情况会产生可衡量的效果。
【解决方案2】:

这是一种方式:

SELECT Manager
FROM (SELECT 'All' Manager, 1 Order
      UNION ALL
      SELECT DISTINCT Manager, 2 Order
      FROM IS_Projects) A
ORDER BY Order, Manager

【讨论】:

    猜你喜欢
    • 2015-03-16
    • 1970-01-01
    • 2021-01-11
    • 1970-01-01
    • 2014-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多