2012-04-16 5 views
10

Ich schreibe eine SQL-Abfrage, um eine Liste der Parameter für einen Bericht in Report Builder 3.0 zu erhalten. Ich brauchte eine zusätzliche Zeile mit dem Wert ‚Alle‘ auf die Ergebnisse wie folgt hinzuzufügen:Wie behält man eine bestimmte Zeile als erstes Ergebnis einer Abfrage (T-SQL)?

SELECT 'All' 
UNION 
SELECT DISTINCT Manager 
FROM    IS_Projects 

Dies funktioniert gut, aber die Abfrage gibt die Zeilen zu mir in alphabetischer Reihenfolge sortiert, wo ich eigentlich ‚Alle‘ wollen um immer oben zu erscheinen (dh als erste Reihe zurückkommen). Der Rest der Ergebnisse kann alphabetisch sortiert werden.

Ich habe Vorschläge zum Hinzufügen einer Spalte Sortierreihenfolge zur Tabelle gesehen, aber ich bin ziemlich neu in SQL, und weiß nicht, wie dies zu tun ist.

Vielen Dank für Anregungen!

+0

Dies lebt auf den Bericht selbst, also bevölkere ich nicht wirklich den Tisch auf diese Weise. Danke für die Tipps! – confusedKid

+0

Ah ... Ich habe meinen Kommentar gelöscht, als ich die Frage erneut gelesen habe, und mir wurde klar, dass es sich um einen Bericht handelt! Sah auch die netten Antworten unten, und stellte fest, dass mein Kommentar nicht länger notwendig war ... –

Antwort

21

Ein Weg;

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

Danke, das funktionierte für mich. – confusedKid

+0

Awesome - wusste nicht, dass Sie Case-Anweisungen in die ORDER BY-Klausel schreiben könnten. Das hat nur Türen geöffnet. Ist es ziemlich performant? – crush

+0

Ich persönlich würde nicht erwarten, dass ein trivialer Fall wie der oben genannte eine messbare Wirkung hat. –

3

Dies ist ein Weg:

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