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

Développement SQL Server Discussion :

Afficher les lignes dont une colonne contient une valeur donnée en premier [2014]


Sujet :

Développement SQL Server

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2011
    Messages : 61
    Points : 45
    Points
    45
    Par défaut Afficher les lignes dont une colonne contient une valeur donnée en premier
    svp j'ai une table qui contient table( user, fonction, date)
    je voudrais afficher les utilisateurs qui ont une fonction donnée les premiers puis les autres et que tout soit order by date
    exemple :
    ( user1,dev,11-11-2016)
    (user2,dba, 11-10-2016)
    (user3, dev, 12-12-2016)
    (user4,res,11-12-2016)

    je voudrais afficher les résultats suivant
    user1
    user3
    user2
    user4

    c'est a dire afficher d'abord les dev en premier classé par date et puis les autres enregistrement classé par date indépendamment de la fonction

    merci bcp

  2. #2
    Expert éminent sénior

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 757
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 757
    Points : 10 697
    Points
    10 697
    Billets dans le blog
    21
    Par défaut
    Bonjour,

    Voici une solution possible : ajouter une colonne 'ordre' dont la valeur va dépendre de la fonction, et trier les résultats sur cette nouvelle colonne.

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    WITH Data(username, fonction, date) AS (
    	SELECT 'user1', 'dev', '11-11-2016'
    	UNION
    	SELECT 'user2', 'dba', '11-10-2016'
    	UNION
    	SELECT 'user3', 'dev', '12-12-2016'
    	UNION 
    	SELECT 'user4', 'res' ,'11-12-2016'
    ),
    OrderedData(username, fonction, date, ordre) AS (
    	SELECT	D.username, 
    			D.fonction, 
    			D.date,
    			CASE WHEN D.fonction = 'dev' THEN 1 ELSE 0 END 
    	FROM Data AS D
    )
    SELECT * FROM OrderedData ORDER BY ordre DESC, date ASC;
    François DORIN
    Consultant informatique : conception, modélisation, développement (C#/.Net et SQL Server)
    Site internet | Profils Viadéo & LinkedIn
    ---------
    Page de cours : fdorin.developpez.com
    ---------
    N'oubliez pas de consulter la FAQ C# ainsi que les cours et tutoriels

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2011
    Messages : 61
    Points : 45
    Points
    45
    Par défaut
    Merci bcp pour ta réponse Dorinf,
    sauf que le problème c'est que j'ai des milliers d'enregistrement est la fonction ici est une variable.pour mieux expliquer la situation, il s'agit d'une application a laquelle se conncete des gens qui ont chacun une fonction (dev,res, dba.....) et je voudrais que une fois un utilisateur est connecté ont lui affiche les résultats en commençant par ceux qui correspond a sa fonction en premier.
    la requête doit ressembler a sa
    select* from table where fonction="celle de l'utilisateur connecté" (une variable) order by date
    union
    select*from table where fonction<>"celle de l'utilisateur connecté" order by date

    sauf que order by ici se fait sur la totalité des résultats

    j'espère que j'ai arrivé a expliquer un peu mon problème ,
    merci

  4. #4
    Expert éminent sénior

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 757
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 757
    Points : 10 697
    Points
    10 697
    Billets dans le blog
    21
    Par défaut
    Citation Envoyé par aghilass Voir le message
    sauf que le problème c'est que j'ai des milliers d'enregistrement est la fonction ici est une variable.
    En quoi est-ce un problème ? Il suffit de remplacer le 'dev' codé en dur par une variable (ou de générer la requête SQL et de l'envoyer ensuite). Enfin bref, rien de bloquant.


    Citation Envoyé par aghilass Voir le message
    la requête doit ressembler a sa
    select* from table where fonction="celle de l'utilisateur connecté" (une variable) order by date
    union
    select*from table where fonction<>"celle de l'utilisateur connecté" order by date
    Bon, je passe sur le doit qui me hérisse le poil. La clause ORDER BY ne s'applique effectivement qu'à l'ensemble des enregistrements. Il ne faut pas oublier qu'un SGBD est par nature ensembliste et que la notion d'ordre n'y est donc pas présent. L'ordre est un problème d'affichage dans 95% des cas.

    Maintenant, rien ne t'empêche d'utiliser la même astuce que j'ai utilisé précédemment
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    select 1 as ordre, * from table where fonction="celle de l'utilisateur connecté" (une variable)
    union
    select 2 as ordre, * from table where fonction<>"celle de l'utilisateur connecté" order by ordre, date
    François DORIN
    Consultant informatique : conception, modélisation, développement (C#/.Net et SQL Server)
    Site internet | Profils Viadéo & LinkedIn
    ---------
    Page de cours : fdorin.developpez.com
    ---------
    N'oubliez pas de consulter la FAQ C# ainsi que les cours et tutoriels

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2011
    Messages : 61
    Points : 45
    Points
    45
    Par défaut
    wé , sa a marché comme vous avez dit , merci beaucoup DORINF , ce truc de mettre 1 as ordre et 2 as ordre sans avoir recours à la table m'a vraiment échappé

    Merci infiniment

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 7
    Dernier message: 25/03/2011, 10h52
  2. Réponses: 11
    Dernier message: 20/08/2009, 22h27
  3. rechercher les enregistrements dont un champ contient une chaine
    Par faabriice dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 06/06/2008, 13h58
  4. Réponses: 1
    Dernier message: 15/05/2008, 11h48
  5. Réponses: 2
    Dernier message: 13/12/2006, 20h30

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