confusedKid
confusedKid

Reputation: 3251

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

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!

Upvotes: 10

Views: 10505

Answers (2)

Lamak
Lamak

Reputation: 70658

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

Upvotes: 3

Alex K.
Alex K.

Reputation: 175826

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

Upvotes: 23

Related Questions