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 :

Besoin d'aide pour une requête SQL


Sujet :

Langage SQL

  1. #1
    Thomaaas
    Invité(e)
    Par défaut Besoin d'aide pour une requête SQL
    Bonjour à tous,
    j'ai besoin de votre aide pour une requête:

    J'ai une table "dossier":

    DOSSIER
    id Number
    item Varchar2(10)
    statut Number

    Les statuts peuvent être:
    -1: Pas encore visible
    0 : Visible
    1 : Terminer

    Il peut y avoir plusieurs lignes dans la table dossier pour un mêmê dossier, exemple:

    id item statut
    ---------------
    DO1 ITEM1 0
    DO1 ITEM2 1
    DO1 ITEM3 0
    DO2 ITEM1 1
    DO2 ITEM2 1
    DO3 ITEM1 0
    DO3 ITEM2 0
    DO3 ITEM3 0

    J'ai besoin de trouver tous les id des dossiers qui sont finis.
    Pour qu'un dossier soit fini, il faut que toutes les lignes qui le compose est un statut à 1 (dans l'exemple, le dossier DO2 est términé).

    Avez vous une idée de requête ? (Le SQBD est Oracle)
    Voici celle que j'ai faites mais si vous en avez une meilleure ou plus "optimisée" je suis preneur, merci a vous.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    SELECT id
    FROM dossier
    WHERE id IN (
      SELECT DISTINCT id
      FROM dossier
      WHERE statut > 0
    )
    AND id NOT IN (
      SELECT DISTINCT id
      FROM dossier
      WHERE statut <= 0
    );
    Dernière modification par Chtulus ; 21/05/2010 à 10h26.

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    En fait tu cherches les dossiers qui ont des statuts à 1 et pour lesquels il n'existe pas de statut différent de 1.

    Voici la requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT DISTINCT d1.id
    FROM dossier d1
    WHERE d1.statut = 1
      AND NOT EXISTS (
        SELECT *
        FROM dossier d2
        WHERE d2.id = d1.id
          AND d2.statu <> 1
    )
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    Salut,

    Sinon tu peux aussi passer par des compteurs, par contre je ne sais pas ce qui va le plus vite sur ta bdd :

    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
     
    with tmp (id, item, statut) as (
    select 'DO1' as id, 'ITEM1' as item, 0 as statut from sysibm.sysdummy1
    union all
    select 'DO1', 'ITEM2', 1 from sysibm.sysdummy1
    union all
    select 'DO1', 'ITEM3',  0 from sysibm.sysdummy1
    union all
    select 'DO2', 'ITEM1', 1 from sysibm.sysdummy1
    union all
    select 'DO2', 'ITEM2', 1 from sysibm.sysdummy1
    union all
    select 'DO3', 'ITEM1', 0 from sysibm.sysdummy1
    union all
    select 'DO3', 'ITEM2', 0 from sysibm.sysdummy1
    union all
    select 'DO3', 'ITEM3', 0 from sysibm.sysdummy1)
     
    SELECT * 
    FROM (SELECT id, COUNT(*) as cnt, SUM(statut) as cnt2 FROM tmp GROUP BY id ) as tmp2
    WHERE cnt = cnt2;

  4. #4
    Thomaaas
    Invité(e)
    Par défaut
    Merci à vous 2.
    La solution de CinePhil marche parfaitement. Merci pour votre aide. a plus

  5. #5
    Membre éclairé Avatar de methylene
    Profil pro
    Inscrit en
    Février 2010
    Messages
    659
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2010
    Messages : 659
    Points : 813
    Points
    813
    Par défaut
    Pense à la balise résolu ->
    Geeker c'est comme manger, on ne peut pas s'en passer !!!

    Tout est objet !!!

    ____________________________________

    http://www.geekingmania.com

  6. #6
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Une autre syntaxe de la solution de punkoff :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      SELECT id
        FROM dossier
    GROUP BY id
      HAVING count(*) = sum(statut)

Discussions similaires

  1. Besoin d'aide pour une requête SQL
    Par p_oum dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 26/11/2009, 09h29
  2. Besoin d'aide pour une requête SQL
    Par sexy-meta dans le forum Langage SQL
    Réponses: 6
    Dernier message: 08/07/2008, 14h36
  3. Besoin d'aide pour une requête SQL
    Par FranckyVegas dans le forum Langage SQL
    Réponses: 7
    Dernier message: 27/05/2008, 20h16
  4. Besoin d'aide pour une requête SQL
    Par Borami dans le forum Langage SQL
    Réponses: 1
    Dernier message: 07/11/2005, 10h33
  5. Besoin d'aide pour une Requête SQL ...
    Par Kokito dans le forum Requêtes
    Réponses: 2
    Dernier message: 07/07/2004, 11h56

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