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 :

[SQL Server 2005] Besoin d'aide pour requête


Sujet :

Langage SQL

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2004
    Messages : 33
    Points : 26
    Points
    26
    Par défaut [SQL Server 2005] Besoin d'aide pour requête
    Bonjour,

    j'ai besoin de faire une requête sur une vue et je ne vois pas du tout comment la faire en sql, je me demande même si c'est possible.

    Ma vue affiche des données sous la forme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    ID      NOM         VALIDE 
    ------  ----------  ------ 
    45      TOTO        1 
    45      TOTO        1
    45      TOTO        0
    46      TITI        0
    46      TITI        1
    47      TATA        1
    48 ...
    Les couples ID - NOM référencent des objets composés eux-mêmes de plusieurs sous-objets qui peuvent être validés ou pas. Pour qu'un des couple soit lui-même valide, il faut que tous les sous-objets le composant le soit. Donc dans mon exemple seul l'id 47 serait valide.

    Pour ressortir les objets non valide je n'ai aucun problème mais par contre pour ressortir uniquement les valides je ne sais pas comment faire. Pour l'instant je fais deux sélections qui me ressortent respectivement tous ceux qui ont au moins un sous-objets valide et tout ceux en ayant un invalide et dans le code de mon application je soustrais les premiers des deuxièmes. Mais si je pouvais faire ça en un seule requête ça serait quand même nettement plus pratique.

    J'utilise SQL Server 2005.

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Points : 1 775
    Points
    1 775
    Par défaut
    Citation Envoyé par Definol
    Les couples ID - NOM référencent des objets composés eux-mêmes de plusieurs sous-objets qui peuvent être validés ou pas. Pour qu'un des couple soit lui-même valide, il faut que tous les sous-objets le composant le soit. Donc dans mon exemple seul l'id 47 serait valide.
    Pouvez-vous éclaircir ce point : pourquoi l'id 47 est-il valide ?
    Pourquoi est-il le seul à être valide ?
    Comment récupérez-vous les sous-objets (par quel clé, composite ou non ?) ?

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2004
    Messages : 33
    Points : 26
    Points
    26
    Par défaut
    Je manque effectivement de précisions. Le 47 est valide car il est le seul à n'avoir que des VALIDE à 1. Les 45 et 46 ont chacun au moins un 0, ce qui fait qu'ils ne sont pas valides.

    Les sous-objets n'apparaissent pas directement dans la vue, il n'y a que leur champ VALIDE qui est présent. En clair mon problème est que je voudrais sélectionner les ID qui n'ont, dans la vue, que des champs VALIDE à 1. Dès qu'un ID a 0 sur ne serait-ce qu'une seule ligne, il ne devrait pas apparaitre dans le résultat de ma requête.

  4. #4
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Points : 1 775
    Points
    1 775
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT ID, NOM, VALIDE
    FROM   MaVue MV1
    WHERE  NOT EXISTS ( SELECT *
                        FROM   MaVue MV2
                        WHERE  MV1.ID = MV2.ID
                        AND    MV2.VALIDE = 0 );
    Ex sous Oracle 10gR1 :
    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    10g SOC5> CREATE TABLE DVP(
      2    ID NUMBER(2),
      3    NOM VARCHAR2(25),
      4    VALIDE NUMBER(1));
     
    Table créée.
     
    10g SOC5> INSERT INTO DVP VALUES (45,'TOTO',1);
     
    1 ligne créée.
     
    10g SOC5> INSERT INTO DVP VALUES (45,'TOTO',1);
     
    1 ligne créée.
     
    10g SOC5> INSERT INTO DVP VALUES (45,'TOTO',0);
     
    1 ligne créée.
     
    10g SOC5> INSERT INTO DVP VALUES (46,'TITI',0);
     
    1 ligne créée.
     
    10g SOC5> INSERT INTO DVP VALUES (46,'TITI',1);
     
    1 ligne créée.
     
    10g SOC5> INSERT INTO DVP VALUES (47,'TATA',1);
     
    1 ligne créée.
     
    10g SOC5> SELECT ID, NOM, VALIDE
      2  FROM   DVP D1
      3  WHERE  NOT EXISTS ( SELECT *
      4                      FROM   DVP D2
      5                      WHERE  D1.ID = D2.ID
      6                      AND    D2.VALIDE = 0 );
     
            ID NOM                           VALIDE
    ---------- ------------------------- ----------
            47 TATA                               1
     
    1 ligne sélectionnée.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2004
    Messages : 33
    Points : 26
    Points
    26
    Par défaut
    Pourquoi je n'y ai pas pensé ?

    Merci beaucoup ça fonctionne très bien !

  6. #6
    Membre expérimenté Avatar de Yanika_bzh
    Homme Profil pro
    Responsable Applicatif et R&D
    Inscrit en
    Février 2006
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Responsable Applicatif et R&D
    Secteur : Finance

    Informations forums :
    Inscription : Février 2006
    Messages : 1 144
    Points : 1 738
    Points
    1 738
    Par défaut
    y'avait ca aussi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT id 
    FROM matable GROUP BY id HAVING SUM(valide)=COUNT(1)
    Bon courage

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

Discussions similaires

  1. Besoin d'aide pour requête SQL
    Par kaboume dans le forum Langage SQL
    Réponses: 22
    Dernier message: 04/07/2011, 16h11
  2. SQL Server + C#, besoin d'aide pour update "non simple" avec bindingsource
    Par robertopowa dans le forum Accès aux données
    Réponses: 1
    Dernier message: 30/04/2010, 11h00
  3. Besoin d'aide pour requête SQL
    Par dinver78 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 21/05/2007, 19h20
  4. Besoin d'aide pour requête SQL
    Par vallica dans le forum Requêtes
    Réponses: 10
    Dernier message: 09/06/2006, 00h16
  5. Besoin d'aide pour requête sur grosse table
    Par Fabouney dans le forum Langage SQL
    Réponses: 3
    Dernier message: 25/01/2006, 10h01

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