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 :

Requête SQL pour appliquer ou assigner une valeur unique à un groupe de données


Sujet :

Développement SQL Server

  1. #1
    Candidat au Club
    Homme Profil pro
    Analyse système
    Inscrit en
    Décembre 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Canada

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Décembre 2018
    Messages : 4
    Points : 3
    Points
    3
    Par défaut Requête SQL pour appliquer ou assigner une valeur unique à un groupe de données
    Bonjour,
    Je veux à partir du résultat d'une requête qui me donne une colonne "Numéro de groupe", "Numéro de cas" et "Niveau du cas" pouvoir appliquer ou assigner un meme "Niveau du cas" au "Numéro de groupe" par hiérarchie de niveau (du plus haut niveau au plus bas 1. Senior X, 2. Senior, 3. IntermediateX, 4. Intermediate, 5. Junior). Pour un meme groupe, je veux que le plus haut niveau s'applique à tous les cas du groupe. MERCI D'AVANCE

    RÉSULTAT DE REQUÊTE 1
    Numéro de groupe Numéro de cas Niveau du cas
    GR0000006096280 AA2663986 Intermediate
    GR0000006096280 AA2663986 Intermediate
    GR0000006096280 AA2664241 SeniorX
    GR0000006096280 AA2664241 Junior
    GR0000006096280 AA2664382 Intermediate
    GR0000006096280 AA2664382 Intermediate
    GR0000006096300 AA2664740 Senior
    GR0000006096300 AA2664740 Senior
    GR0000006096300 AA2664740 Senior
    GR0000006096300 AA2664740 Senior
    GR0000006096300 AA2664740 Senior
    GR0000006096300 AA2664740 Senior
    GR0000006096544 AA2665531 Junior
    GR0000006096544 AA2665531 Intermediate
    GR0000006096544 AA2665532 Intermediate
    GR0000006096544 AA2665532 Intermediate
    GR0000006096544 AA2668395 Intermediate
    GR0000006096544 AA2668395 Intermediate
    GR0000006096544 AA2668395 SeniorX
    GR0000006096544 AA2668395 Intermediate
    GR0000006096544 AA2668395 Intermediate
    GR0000006096544 AA2668395 Intermediate

    RÉSULTAT DE REQUÊTE 2 (QUE JE VOUDRAIS OBTENIR)
    GR0000006096280 AA2663986 Intermediate
    GR0000006096280 AA2663986 Intermediate
    GR0000006096280 AA2664241 SeniorX
    GR0000006096280 AA2664241 SeniorX
    GR0000006096280 AA2664382 SeniorX
    GR0000006096280 AA2664382 SeniorX
    GR0000006096300 AA2664740 Senior
    GR0000006096300 AA2664740 Senior
    GR0000006096300 AA2664740 Senior
    GR0000006096300 AA2664740 Senior
    GR0000006096300 AA2664740 Senior
    GR0000006096300 AA2664740 Senior
    GR0000006096544 AA2665531 SeniorX
    GR0000006096544 AA2665531 SeniorX
    GR0000006096544 AA2665532 SeniorX
    GR0000006096544 AA2665532 SeniorX
    GR0000006096544 AA2668395 SeniorX
    GR0000006096544 AA2668395 SeniorX
    GR0000006096544 AA2668395 SeniorX
    GR0000006096544 AA2668395 SeniorX
    GR0000006096544 AA2668395 SeniorX
    GR0000006096544 AA2668395 SeniorX

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 803
    Points
    30 803
    Par défaut
    Qu'as-tu déjà essayé comme requête ?
    Où exactement rencontres-tu un problème ?
    - Un message d'erreur ? Que dit-il ?
    - Un résultat erroné ? Donne-nous un exemple...
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 937
    Points : 4 358
    Points
    4 358
    Par défaut
    Vos résultats ne correspondent pas à votre énoncé :

    données :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GR0000006096280	AA2664241	SeniorX
    énoncé:
    du plus haut niveau au plus bas 1. Senior X, 2. Senior, 3. IntermediateX, 4. Intermediate, 5. Junior
    ...
    le plus haut niveau s'applique à tous les cas du groupe
    résultat proposé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GR0000006096280	AA2663986	Intermediate

  4. #4
    Candidat au Club
    Homme Profil pro
    Analyse système
    Inscrit en
    Décembre 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Canada

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Décembre 2018
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    oui vous avez raison, j'ai fait une erreur. Le résultat est Senior X et non Intermediate dans ce cas.

    Si on a un début de piste de solution... Je suis embêté

  5. #5
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 937
    Points : 4 358
    Points
    4 358
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    update data d set lvl = (    select lvl from (select row_number() over( partition by grp order by case lvl when 'SeniorX' then 1 when 'Senior' then 2 when 'IntermediateX' then 3 when 'Intermediate' then 4 else 5 end) as rn,  
                d.* from data d) nd where nd.grp = d.grp and nd.rn = 1 
    )
    ;
    GRP CAS LVL
    GR0000006096280 AA2663986 SeniorX
    GR0000006096280 AA2663986 SeniorX
    GR0000006096280 AA2664241 SeniorX
    GR0000006096280 AA2664241 SeniorX
    GR0000006096280 AA2664382 SeniorX
    GR0000006096280 AA2664382 SeniorX
    GR0000006096300 AA2664740 Senior
    GR0000006096300 AA2664740 Senior
    GR0000006096300 AA2664740 Senior
    GR0000006096300 AA2664740 Senior
    GR0000006096300 AA2664740 Senior
    GR0000006096300 AA2664740 Senior
    GR0000006096544 AA2665531 SeniorX
    GR0000006096544 AA2665531 SeniorX
    GR0000006096544 AA2665532 SeniorX
    GR0000006096544 AA2665532 SeniorX
    GR0000006096544 AA2668395 SeniorX
    GR0000006096544 AA2668395 SeniorX
    GR0000006096544 AA2668395 SeniorX
    GR0000006096544 AA2668395 SeniorX
    GR0000006096544 AA2668395 SeniorX
    GR0000006096544 AA2668395 SeniorX

  6. #6
    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,

    comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    SELECT 
          Groupe
        , Cas
        ,   FIRST_VALUE(niveau) over(PARTITION BY Groupe ORDER BY CASE Niveau 
    		WHEN 'Senior X'		THEN 1
    	 	WHEN 'Senior'		THEN 2
    		WHEN 'IntermediateX'	THEN 3
    		WHEN 'Intermediate'	THEN 4
    		WHEN 'Junior'		THEN 5
    	END)	AS NiveauGroupe
    FROM LaTable

  7. #7
    Candidat au Club
    Homme Profil pro
    Analyse système
    Inscrit en
    Décembre 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Canada

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Décembre 2018
    Messages : 4
    Points : 3
    Points
    3
    Par défaut fonction FIRST_VALUE
    Bonjour aieeeuuuuu,

    Merci pour la réponse. Cette fonction est malheureusement absente de SQL server 2008. Y'aurait-il une fonction alternative qui me permettrait de contourner le problème?

  8. #8
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 153
    Points : 7 403
    Points
    7 403
    Billets dans le blog
    1
    Par défaut
    Une sous-requête avec un MIN devrait faire l'affaire.
    Mais ça se ressentira sur les performances.

    Accessoirement, SQL Server 2008 "tout court" n'est plus maintenu depuis un moment.
    Quand à la version 2008 R2 ça arrive ça grands pas, d'ici 6 mois.

    https://support.microsoft.com/fr-fr/...le/search/1044

    Il serait probablement temps de migrer vers une version plus récente...
    On ne jouit bien que de ce qu’on partage.

  9. #9
    Candidat au Club
    Homme Profil pro
    Analyse système
    Inscrit en
    Décembre 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Canada

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Décembre 2018
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Bonjour StringBuilder,

    J'ai pu me débrouiller en réalisant quelques inner join pour obtenir mon niveau de cas sur mes cas NON-GROUPÉS et une autre sur mes cas GROUPÉS avec des requêtes comme celles-ci :

    CAS NON_GROUPÉS
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
                    SELECT  X.[Numéro de cas],
    		CASE 
    		WHEN Sum(Case when X.[Niveau du cas] = 'Senior X' THEN 1 ELSE 0 END) > 0 THEN 'Senior X'
    		WHEN Sum(Case when X.[Niveau du cas] = 'Intermediate X' THEN 1 ELSE 0 END) > 0 THEN 'Intermediate X'
    		WHEN Sum(Case when X.[Niveau du cas] = 'Senior' THEN 1 ELSE 0 END) > 0 THEN 'Senior'
    		WHEN Sum(Case when X.[Niveau du cas] = 'Intermediate' THEN 1 ELSE 0 END) > 0 THEN 'Intermediate'
    		WHEN Sum(Case when X.[Niveau du cas] = 'Junior' THEN 1 ELSE 0 END) > 0 THEN 'Junior'
    		END AS [NiveauCas]

    CAS GROUPÉS
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
                    SELECT 	X.[numéro de groupe],
    		CASE 
    		WHEN Sum(Case when X.[Niveau du cas] = 'Senior X' THEN 1 ELSE 0 END) > 0 THEN 'Senior X'
    		WHEN Sum(Case when X.[Niveau du cas] = 'Intermediate X' THEN 1 ELSE 0 END) > 0 THEN 'Intermediate X'
    		WHEN Sum(Case when X.[Niveau du cas] = 'Senior' THEN 1 ELSE 0 END) > 0 THEN 'Senior'
    		WHEN Sum(Case when X.[Niveau du cas] = 'Intermediate' THEN 1 ELSE 0 END) > 0 THEN 'Intermediate'
    		WHEN Sum(Case when X.[Niveau du cas] = 'Junior' THEN 1 ELSE 0 END) > 0 THEN 'Junior'
    		END AS [NiveauCas]
     
                    from X
    Merci beaucoup à toi et aux autres pour votre aide, très apprécié!!

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 27/06/2014, 10h28
  2. Réponses: 2
    Dernier message: 12/05/2014, 11h53
  3. [phpMyAdmin] Requête SQL via phpMyAdmin - calcul d'une valeur
    Par littlebob dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 05/12/2012, 20h35
  4. Réponses: 3
    Dernier message: 09/10/2009, 20h20
  5. Réponses: 2
    Dernier message: 28/05/2008, 12h17

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