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 :

Choix "prioritaire" des valeurs d'une colonne


Sujet :

Développement SQL Server

  1. #1
    Candidat au Club
    Inscrit en
    Avril 2013
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Avril 2013
    Messages : 9
    Points : 3
    Points
    3
    Par défaut Choix "prioritaire" des valeurs d'une colonne
    Bonjour,

    J'espère que le titre de mon post n'est pas trop flou mais je ne savais pas trop comment exprimer mon besoin. Le mieux est donc de vous l'expliquer :

    imaginons que j'aie une table tb1 qui ressemble à ceci :
    [Numero]  [code]
    42671038	R
    42671038	C
    42671037	C
    42671037	R
    42671037	M
    je cherche à écrire une requête qui me permettrait de regrouper les éléments par numero et de sélectionner le code avec comme ordre de priorité : M>R>C, afin d'obtenir ce résultat :
    [Numero]  [code]
    42671038	R
    42671037	M
    Si mon ordre de priorité avait suivi l'ordre alphabétique j'aurais pu faire par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT Numero, MAX(code) FROM tb1 GROUP BY Numero
    , mais ce serait trop simple

    J'ai essayé plusieurs requêtes différentes, avec des CASE - WHEN EXISTS mais cela s'appliquait à toute la table et pas "par numéro", donc pas ce que je cherche.

    J'attends vos suggestions, merci d'avance !

    PS : je suis sur SQL SERVER 2008

  2. #2
    Invité
    Invité(e)
    Par défaut
    un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT Numero, MAX(code) as code_max
    FROM tb1 
    group by Numero
    order by Numero ,
    case when code_max = 'M' then 1
    	when code_max = 'R' then 2
    	when code_max = 'C' then 3
    [...]
    	ELSE 9999
    END
    , code_max

  3. #3
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    vouz pouvez essayer ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    SELECT 
    		Numero
    	,	COALESCE(
    			MAX(CASE WHEN code = 'M' THEN 'M' ELSE NULL END)
    			,MAX(CASE WHEN code = 'R' THEN 'R' ELSE NULL END)
    			,MAX(CASE WHEN code = 'C' THEN 'C' ELSE NULL END)
    		)
    FROM LaTable
    GROUP BY Numero
    ou bien ceci
    Code : 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
    19
     
    WITH TMP AS (
    	SELECT 
    			numero
    		,	code
    		,	ROW_NUMBER() OVER(
    					PARTITION BY Numero 
    					ORDER BY CASE code
    						WHEN 'M' THEN 1
    						WHEN 'R' THEN 2
    						WHEN 'C' THEN 3
    					END
    				) AS RN
    	FROM LaTable
    )
    SELECT 
    		Numero
    	,	code
    FROM TMP

Discussions similaires

  1. Décalage des valeurs d'une colonne
    Par Niazov dans le forum SAS Base
    Réponses: 8
    Dernier message: 09/07/2008, 17h28
  2. insertion des valeurs dans une colonne
    Par freestyler1982 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 24/01/2007, 16h38
  3. Maximum des valeurs d'une colonne
    Par cjacquel dans le forum Access
    Réponses: 1
    Dernier message: 19/01/2007, 17h25
  4. Réponses: 2
    Dernier message: 11/07/2006, 12h02
  5. quote dans des valeurs d'une colonne SET
    Par Jean Fi dans le forum Requêtes
    Réponses: 6
    Dernier message: 30/03/2006, 20h16

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