如何在查询中将特定行保持为第一个结果(T-SQL)?

10

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

SELECT 'All'
UNION
SELECT DISTINCT    Manager
FROM               IS_Projects

这个是可行的,但查询结果按字母顺序排序,而我需要无论何时都让“全部”出现在最顶部(即作为第一行返回)。其余的结果可以按字母顺序排序。

我看到有人建议向表中添加一个排序列,但我对SQL还比较陌生,不知道该怎么做。

谢谢任何建议!


这个存在于报告本身上,所以我并不是通过这种方式填充表格。不过还是谢谢你的建议! - confusedKid
啊...当我重新阅读问题并意识到它是为了报告时,我删除了我的评论!我还看到下面的整洁答案,认为我的评论已经不再必要了... - Jonathan Sayce
2个回答

23

一种方法;

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

太棒了 - 我不知道你可以在ORDER BY子句中放置case语句。这打开了新的大门。它的性能表现如何? - crush
个人而言,我不认为像上面那样的琐碎案例会产生可测量的影响。 - Alex K.

3
这是一种方式:
SELECT Manager
FROM (SELECT 'All' Manager, 1 Order
      UNION ALL
      SELECT DISTINCT Manager, 2 Order
      FROM IS_Projects) A
ORDER BY Order, Manager

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接