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 :

Requête SQL sélection


Sujet :

Langage SQL

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 4
    Points : 3
    Points
    3
    Par défaut Requête SQL sélection
    Bonjour,

    Je butte pour créer une requête SQL me permettant de filtrer une table. La sélection doit se faire à partir de deux colonnes de la table :
    - La première comporte un identifiant (un même identifiant peut être présent sur plusieurs lignes)
    - La seconde colonne comprend des valeurs entre 0 et 9

    La requête que je souhaite faire doit conserver pour chaque identifiant différent de la première colonne :
    - si pour toutes les lignes de l’identifiant la seconde colonne comporte uniquement la valeur 0 : toutes les lignes sont à conserver
    - si certaines lignes de l'identifiant comporte une deuxième colonne avec des valeurs >0 : on ne conserve que ces lignes (on supprime les lignes ayant 0 dans la seconde colonne).

    Ci dessous pour être plus clair un tableau exemple avec surligné en vert les lignes que doit sélectionner la requête SQL.

    Nom : Exemples_tables2.png
Affichages : 120
Taille : 3,0 Ko

    Je ne sais pas comment faire ce type de requête.

    Merci pour votre aide !

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Bonjour,
    Si je reformule le besoin, il faut toutes les lignes donc la valeur est différente de 0, ou est à 0 mais pour lesquelles il n'y a pas de lignes avec le même id et une valeur <> 0.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    select l1.*
    from LaTable as l1
    left outer join LaTable as l2
    on l1.id = l2.id and l2.valeur <> 0
    where (l1.valeur = 0 and l2.id is null) or l1.valeur <> 0
    Tatayo.

  3. #3
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 136
    Points : 38 912
    Points
    38 912
    Billets dans le blog
    9
    Par défaut
    Bonjour,

    Par exemple comme ceci :

    Code SQL : 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
    with T1(idt, car) as
        (select 1, 0   union all
         select 2, 4   union all
         select 3, 0   union all
         select 3, 0   union all
         select 3, 0   union all
         select 4, 0   union all
         select 4, 1   union all
         select 4, 2
        )
     
    select distinct idt, car
    from
       (select idt
             , car
             , case when exists 
                   (select 1
                    from T1 as subq
                    where subq.idt=T1.idt
                      and subq.car>0)
                    then 1
                    else 0
               end as flg
        from T1
       ) T2
    where (T2.flg = 1 and T2.car >0)
       or T2.flg = 0

  4. #4
    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
    Ou encore :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    select * from (
    	select t.*, 
    		count(decode(car,0,null,1)) over(partition by idt) as n_notzero
    	from t1 t
    )
    where not ( car = 0 and n_notzero > 0 )
    ;

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Merci pour vos réponses et Tatayo très bien résumé en une seule ligne !

    Bonne journée,

  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
    Similaire à la réponse de JeitEmgie :
    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
    with t1 (idt, car) as
    (
    select 1, 0 union all
    select 2, 4 union all
    select 3, 0 union all
    select 3, 0 union all
    select 3, 0 union all
    select 4, 0 union all
    select 4, 1 union all
    select 4, 2
    )
      , t2 (idt, car, sum_car) as
    (
    select idt, car
         , sum(car) over(partition by idt) as sum_car
      from t1
     )
       select idt, car
         from t2
        where car     > 0
           or sum_car = 0
    order by 1, 2;
     
    idt  car
    ---  ---
      1    0
      2    4
      3    0
      3    0
      3    0
      4    1
      4    2

Discussions similaires

  1. Datagridview & requte sql
    Par oami89 dans le forum VB.NET
    Réponses: 8
    Dernier message: 14/04/2011, 08h40
  2. Réponses: 5
    Dernier message: 06/10/2009, 09h37
  3. Réponses: 4
    Dernier message: 11/06/2009, 16h03
  4. comment parametrer une requte sql ds ireport
    Par hamzuss dans le forum Jasper
    Réponses: 3
    Dernier message: 17/03/2009, 20h01
  5. Requte Sql Avancée, question ... ? Estce possible ?
    Par plex dans le forum Administration
    Réponses: 8
    Dernier message: 14/12/2005, 15h13

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