How to keep a specific row as the first result of a query (T-SQL)?
Asked Answered
E

2

10

I'm writing a SQL query to get a list of parameters for a report in Report Builder 3.0. I needed to add an extra row with the value 'All' to the results like this:

SELECT 'All'
UNION
SELECT DISTINCT    Manager
FROM               IS_Projects

This works fine, but the query returns the rows to me sorted in alphabetical order, where I actually want 'All' to appear at the top at all times (ie. come back as the first row). The rest of the results can be sorted alphabetically.

I've seen suggestions on adding a sort-order column to the table, but I'm pretty new to SQL, and don't know how to do this.

Thanks for any suggestions!

Edlun answered 16/4, 2012 at 14:56 Comment(2)
This lives on the report itself, so I'm not actually populating the table this way. Thanks for the tips though!Edlun
Ah...I deleted my comment when I re-read the question and realised it was for a report! Also saw the neat answers below, and figured my comment was no-longer necessary...Depart
G
23

One way;

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
Grannie answered 16/4, 2012 at 15:1 Comment(2)
Awesome - didn't know you could put case statements in the ORDER BY clause. This just opened doors. Is it fairly performant?Harless
Personally I would not expect a trivial case like the above to have a measurable effect.Grannie
C
3

This is one way:

SELECT Manager
FROM (SELECT 'All' Manager, 1 Order
      UNION ALL
      SELECT DISTINCT Manager, 2 Order
      FROM IS_Projects) A
ORDER BY Order, Manager
Cosby answered 16/4, 2012 at 14:59 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.