2012-04-16 11 views
10

Sto scrivendo una query SQL per ottenere un elenco di parametri per un report in Report Builder 3.0. Avevo bisogno di aggiungere una riga in più con il valore 'Tutto' per i risultati come questo:Come mantenere una riga specifica come primo risultato di una query (T-SQL)?

SELECT 'All' 
UNION 
SELECT DISTINCT Manager 
FROM    IS_Projects 

Questo funziona bene, ma la query restituisce le righe da me ordinati in ordine alfabetico, in cui ho effettivamente voglio 'All' apparire sempre in alto (es. tornare indietro come prima riga). Il resto dei risultati può essere ordinato alfabeticamente.

Ho visto suggerimenti sull'aggiunta di una colonna di ordinamento alla tabella, ma sono abbastanza nuovo su SQL e non so come farlo.

Grazie per eventuali suggerimenti!

+0

Questo vive sulla relazione stessa, quindi in realtà non sto popolando il tavolo in questo modo. Grazie per i suggerimenti però! – confusedKid

+0

Ah ... Ho cancellato il mio commento quando ho riletto la domanda e ho capito che era per un rapporto! Ho visto anche le risposte chiare qui sotto e ho capito che il mio commento non era più necessario ... –

risposta

21

Un modo;

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 
+0

Grazie, questo ha funzionato per me. – confusedKid

+0

Impressionante: non sapevo che potevi inserire le dichiarazioni del caso nella clausola ORDER BY. Questo ha appena aperto le porte. È abbastanza performante? – crush

+0

Personalmente non mi aspetterei un caso banale come quello sopra per avere un effetto misurabile. –

3

Questo è un modo:

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