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

Langage SQL Discussion :

Problème sur select


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 104
    Points : 57
    Points
    57
    Par défaut Problème sur select
    Bonjour.

    J'ai un souci pour faire une requête sous Sql Serveur.

    J'ai ceci:
    ColonneA ColonneB ColonneC
    AZERTY0101 1 2
    AZERTY0101 1 3
    AZERTY0101 1 4
    AZERTY0101 1 5
    AZERTY0101 1 6
    AZERTY0101 1 7
    AZERTY0101 1 8
    AZERTY0101 1 9
    AZERTY0101 2 11
    AZERTY0101 3 14
    AZERTY0101 3 15
    AZERTY0202 1 2
    AZERTY0202 2 5
    AZERTY0202 2 6
    AZERTY0202 3 9
    AZERTY0202 3 10
    AZERTY0202 4 13

    et je voudrais ceci:
    ColonneA ColonneB ColonneC ColonneD
    AZERTY0101 1 2 1
    AZERTY0101 1 3 0
    AZERTY0101 1 4 0
    AZERTY0101 1 5 0
    AZERTY0101 1 6 0
    AZERTY0101 1 7 0
    AZERTY0101 1 8 0
    AZERTY0101 1 9 0
    AZERTY0101 2 11 1
    AZERTY0101 3 14 1
    AZERTY0101 3 15 0
    AZERTY0202 1 2 1
    AZERTY0202 2 5 1
    AZERTY0202 2 6 0
    AZERTY0202 3 9 1
    AZERTY0202 3 10 0
    AZERTY0202 4 13 1

    Je souhaite donc avoir en ColonneD la valeur 1 pour chaque couple différent de ColonneA et ColonneB avec la valeur minimal de ColonneC et la valeur 0 le reste du temps.

    Avec cette requête je n'ai que mes valeurs = 1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT ColonneA,
    ColonneB, 
    MIN(ColonneC),
    1 as ColonneD
    FROM maTable 
    group by ColonneA, ColonneB
    ColonneA ColonneB ColonneC ColonneD
    AZERTY0101 1 2 1
    AZERTY0202 1 2 1
    AZERTY0202 2 5 1
    AZERTY0202 3 9 1
    AZERTY0202 4 13 1

    Comme puis-je faire pour avoir les valeur en 0?

    Merci.

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

    Dans votre résultat attendu, pourquoi 0 pour ces deux lignes :
    AZERTY0101 2 11 0
    AZERTY0101 3 14 0

    n'est-ce pas plutôt 1 ? (il n'y a pas de couple AZERTY0101/2 ayant une colonne C inférieurs a 11...)

    Est-ce que cette requete vous donne ce que vous attendez ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    SELECT 
    		ColonneA,
    		ColonneB,
    		ColonneC,
    		CASE 
    			WHEN RANK() OVER (
    				PARTITION BY ColonneA,ColonneB 
    				ORDER BY ColonneC
    				) = 1 
    				THEN 1
    			ELSE 0
    		END AS ColonneD
    FROM	MaTable

  3. #3
    Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 104
    Points : 57
    Points
    57
    Par défaut
    Effectivement, je me suis trompé dans mon exemple! Je l'ai corrigé.
    Votre requête fonctionne à merveille, il faut vraiment que je boss sur les instructions Partition (et WITH...) avec lesquels j'ai des soucis!

    Merci beaucoup.
    Bonne soirée.

  4. #4
    Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 104
    Points : 57
    Points
    57
    Par défaut
    Bonjour.

    J'ai oublié de préciser que je dois exécuter cette requête sur un serveur 2005 (pas de problème) mais également sur un serveur 2000, qui ne reconnait pas la fonction RANK.
    J'ai trouvé quelques exemple de contournement, mais n'arrive pas à les appliquer.

    Pouvez-vous m'aider?
    Cordialement.

  5. #5
    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
    sans fonction fenêtrée, vous pouvez faire comme ça :

    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
    20
    21
    22
    23
     
    SELECT 
    		Ref.ColonneA,
    		Ref.ColonneB,
    		Ref.ColonneC,
    		CASE 
    			WHEN mini.ColonneA IS NULL THEN 0 
    			ELSE 1 
    		END AS ColonneD
    FROM		MaTable AS Ref
    LEFT JOIN	(
    			SELECT 
    				ColonneA,
    				ColonneB,
    				MIN(ColonneC) as minC
    			FROM	MaTable
    			GROUP BY 
    				ColonneA,
    				ColonneB
    			)mini
    		ON	mini.ColonneA = Ref.ColonneA
    		AND	mini.ColonneB = Ref.ColonneB
    		AND	mini.minC = Ref.ColonneC

  6. #6
    Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 104
    Points : 57
    Points
    57
    Par défaut
    Merci énormément, ça fonctionne

    Je vous souhaite une agréable journée.

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

Discussions similaires

  1. Problème sur Select Case When
    Par parilla77 dans le forum Langage SQL
    Réponses: 11
    Dernier message: 06/04/2012, 17h11
  2. problème sur selection dans un DataGridView
    Par gueulederack dans le forum VB.NET
    Réponses: 16
    Dernier message: 10/01/2012, 10h46
  3. Problème sur select liste déroulante
    Par Vanessa48 dans le forum Langage
    Réponses: 9
    Dernier message: 20/10/2011, 18h02
  4. [AC-2007] Problème sur SELECT MAX
    Par KIK83 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 30/11/2009, 22h33
  5. Problème de select sur une date (DATETIME....)
    Par zeldoi5 dans le forum Langage SQL
    Réponses: 7
    Dernier message: 16/05/2005, 12h19

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