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?
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 |
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
)
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
Raj