web-dev-qa-db-fra.com

Ordre par clause avec Union dans SQL Server

Je veux une liste des noms de parti avec la 1ère option comme "Tous" dans la base de données. mais je ne vais pas insérer "Tous" dans la base de données, il suffit de récupérer le temps. alors, j'ai écrit cette requête.

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

C'est mon résultat

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

quand j'utilise order by Name, il affiche le résultat ci-dessous.

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

Mais, je veux que la 1ère option soit «Tous», puis la liste des parties en ordre trié. Comment puis-je faire cela?

15
Dhaval Ptl

Vous devez utiliser une sous-requête avec CASE dans la clause ORDER BY comme ceci:

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

Sortie:

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

Voir ce SQLFiddle

34
hims056

Vous pouvez utiliser 'commande par' avec l'instruction supérieure dans une union de cette manière:

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

Comme vous avez quand même codé 0, Tous ajoutent simplement un espace avant le

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

SQL FIDDLE

Raj

1
Raj