COMMANDE PAR éléments doivent apparaître dans la liste de sélection si SELECT DISTINCT est spécifié... je passe alors des heures mais rien trouvé
Ci-dessous est la partie de ma grande requête sql et je ne pouvais pas trouver une solution à mon problème après avoir passé des heures sur elle.
Mon exigence est seulement de trier les enregistrements sur RaceNumber croissant et de mettre null enregistrements sur fond
SELECT DISTINCT TP.racenumber,
TP.teamid,
TP.teamname
FROM tblteamprofile TP
ORDER BY CASE
WHEN TP.racenumber IS NULL THEN 1
ELSE 0
end,
TP.teamid,
TP.teamname
Quelqu'un peut m'aider ce n'est que mon humble demande...! veuillez
Ce sgbd que vous utilisez?
C'est MSSQL
double possible de COMMANDE PAR éléments doivent apparaître dans la liste de sélection si SELECT DISTINCT est spécifié erreur
d'autres en double: stackoverflow.com/q/12794751/220060
un autre double: stackoverflow.com/questions/265628/220060
C'est MSSQL
double possible de COMMANDE PAR éléments doivent apparaître dans la liste de sélection si SELECT DISTINCT est spécifié erreur
d'autres en double: stackoverflow.com/q/12794751/220060
un autre double: stackoverflow.com/questions/265628/220060
OriginalL'auteur Haider | 2013-02-21
Vous devez vous connecter pour publier un commentaire.
Ajouter la COMMANDE PAR élément de la liste de sélection:
Comme Facteur Mystique astucieusement notes dans les commentaires, vous pouvez simplifier la requête si votre SGBDR permet de ré-utiliser un alias dans la clause ORDER BY:
case
un alias dans la clause select de référence et par l'alias de la commande parMerci pour le commentaire. Malheureusement, tous les Sgbdr permettre cela.
+1 -- SQL Server nécessite de mettre tous afin de champs utilisés dans l'instruction select lorsque distinct est utilisé. Belle réponse.
mais sql server n', et la question se réfère à sql server
Une semblable tactique est de pousser RaceNumberFlag dans une sous-requête à l'aide de la CROIX s'APPLIQUENT. Cela vous permet de les grouper PAR cet élément ou d'effectuer d'autres opérations sur le produit. Cela est particulièrement applicable pour plus d'instructions complexes.
OriginalL'auteur bernie
Le problème est le moteur de base de données ne sais pas comment sélectionner qu'une valeur particulière si ce n'est pas une partie de la
SELECT
liste dans unSELECT DISTINCT
requête.Vous devriez être en mesure d'utiliser un
GROUP BY
au lieu deDISTINCT
si vous ne souhaitez pas sélectionner la colonne:Pourquoi avez-vous d'inclure le
CASE
dans le GROUPE ?Vous avez raison, si
TP.racenumber
est déjà dans le GROUPE PAR il ne devrait pas.OriginalL'auteur lc.
Peut-être que l'ordre doit être ceci:
Si vous souhaitez commander par RaceNumber, pourquoi avez-vous TeamId et TeamName dans la requête?
OriginalL'auteur Gordon Linoff