IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MS SQL Server Discussion :

ORDER BY et UNION : Trier seulement la deuxième partie de la requête


Sujet :

MS SQL Server

  1. #1
    Membre éclairé Avatar de miniil
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2003
    Messages
    267
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2003
    Messages : 267
    Par défaut ORDER BY et UNION : Trier seulement la deuxième partie de la requête
    Bonjour,

    Je cherche à trier alphabétiquement les résultats de la deuxième requête.

    Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT P_FNAME
    FROM Persons
    WHERE P_FNAME like 'Test'
    UNION ALL
    SELECT P_FNAME
    FROM Persons
    WHERE P_FNAME not like 'Test'
    ORDER BY 1
    Afin de me permettre d'avoir le nom Test au début et ensuite le reste trié alphabétiquement.

    D'avance merci pour votre aide

  2. #2
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 952
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 952
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT P_FNAME, 1 as tri
      FROM Persons
     WHERE P_FNAME like 'Test%'
     UNION ALL
    SELECT P_FNAME, 2
      FROM Persons
     WHERE P_FNAME not like 'Test%'
     ORDER BY tri, P_FNAME

  3. #3
    Membre Expert
    Inscrit en
    Août 2009
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 1 073
    Par défaut
    Citation Envoyé par miniil Voir le message
    Bonjour,

    Je cherche à trier alphabétiquement les résultats de la deuxième requête.
    Introduisez une colonne pour faire le tri :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT 1 AS order1,P_FNAME
    FROM Persons
    WHERE P_FNAME like 'Test'
    UNION ALL
    SELECT 2,P_FNAME
    FROM Persons
    WHERE P_FNAME not like 'Test'
    ORDER BY 1,2

  4. #4
    Membre éclairé Avatar de miniil
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2003
    Messages
    267
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2003
    Messages : 267
    Par défaut
    Merci pour la réponse rapide
    C'est parfait
    Bonne journée

  5. #5
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    On peut même faire beaucoup plus court :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      SELECT P_FNAME
        FROM Persons
       WHERE P_FNAME IS NOT NULL
    ORDER BY CASE WHEN P_FNAME <> 'Test' THEN P_FNAME END ASC;

  6. #6
    Membre Expert
    Inscrit en
    Août 2009
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 1 073
    Par défaut
    Citation Envoyé par Waldar Voir le message
    On peut même faire beaucoup plus court :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      SELECT P_FNAME
        FROM Persons
       WHERE P_FNAME IS NOT NULL
    ORDER BY CASE WHEN P_FNAME <> 'Test' THEN P_FNAME END ASC;
    En effet, une seule passe est plus indiquée. Pour autant, le cas de nullité de P_FNAME (s'il existe, il faudrait connaitre la table) rend l'ordre problématique. Auquel cas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT P_FNAME
      FROM Persons
     WHERE P_FNAME IS NOT NULL
     ORDER BY CASE WHEN P_FNAME = 'Test' THEN 0 ELSE 1 END, P_FNAME ASC;

  7. #7
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Citation Envoyé par Rei Ichido Voir le message
    Pour autant, le cas de nullité de P_FNAME
    C'est déjà réglé par le filtre WHERE P_FNAME IS NOT NULL non ?

  8. #8
    Membre Expert
    Inscrit en
    Août 2009
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 1 073
    Par défaut
    Citation Envoyé par Waldar Voir le message
    C'est déjà réglé par le filtre WHERE P_FNAME IS NOT NULL non ?
    Euhhh ... oui
    Y a des jours où on devrait rester chez soi au chaud et ne pas intervenir.

Discussions similaires

  1. [SQL] Order by et Union (?)
    Par Procto dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 15/02/2010, 09h23
  2. Erreur 91 seulement à la deuxième exécution
    Par ak_damien dans le forum VBA Access
    Réponses: 2
    Dernier message: 02/07/2008, 15h10
  3. [FB] Bde vs FibPlus Probleme SQL (Order by et Union)
    Par SergioMaster dans le forum Bases de données
    Réponses: 2
    Dernier message: 18/06/2007, 13h41
  4. unset de session efficace seulement au deuxième appel
    Par speedev dans le forum Langage
    Réponses: 1
    Dernier message: 20/07/2006, 11h05
  5. problème avec order by et union
    Par ghostdog dans le forum Langage SQL
    Réponses: 8
    Dernier message: 23/05/2006, 09h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo