web-dev-qa-db-de.com

Bestellen Sie per Klausel bei Union in Sql Server

Ich möchte Liste der Namen der Parteien mit der ersten Option als "Alle" aus der Datenbank. aber ich werde nicht 'All' in Database einfügen, braucht nur Zeit abzurufen. also habe ich diese abfrage geschrieben.

Select 0 PartyId, 'All' Name
Union
select PartyId, Name
from PartyMst

Das ist mein Ergebnis

0   All
1   SHIV ELECTRONICS
2   AAKASH & CO.
3   SHAH & CO.

wenn ich order by Name verwende, wird unter dem Ergebnis angezeigt.

2   AAKASH & CO.
0   All
3   SHAH & CO.
1   SHIV ELECTRONICS

Ich möchte aber die 1. Option als "Alle" und dann eine Liste der Parteien in sortierter Reihenfolge. Wie kann ich das tun?

15
Dhaval Ptl

Sie müssen eine Unterabfrage mit CASE in der ORDER BY-Klausel wie folgt verwenden:

SELECT * FROM
(
  Select 0 PartyId, 'All' Name
  Union
  select PartyId, Name
  from PartyMst
) tbl
ORDER BY CASE WHEN PartyId = 0 THEN 0 ELSE 1 END
,Name

Ausgabe:

| PARTYID |             NAME |
------------------------------
|       0 |              All |
|       2 |     AAKASH & CO. |
|       3 |       SHAH & CO. |
|       1 | SHIV ELECTRONICS |

Siehe diese SQLFiddle

34
hims056

Sie können 'order by' mit der obersten Anweisung in einer Union folgendermaßen verwenden:

Select 0 PartyId, 'All' Name
Union
select * from ( 
  select top (select count(*) from PartyMst) PartyId, Name
  from PartyMst
  order by Name
)
2
Daniel De León

Da Sie ohnehin hardcoding 0 sind, fügen Sie einfach ein Leerzeichen vor dem All ein

Select 0 PartyId, ' All' Name
Union
select PartyId, Name
from PartyMst
ORDER BY Name

SQL FIDDLE

Raj

1
Raj