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

SQL Oracle Discussion :

Sélectionner les données >0 dans 2 champs avec sql


Sujet :

SQL Oracle

  1. #1
    Membre éclairé Avatar de sondo
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Août 2004
    Messages
    540
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Service public

    Informations forums :
    Inscription : Août 2004
    Messages : 540
    Par défaut Sélectionner les données >0 dans 2 champs avec sql
    Salut à tous,

    Voici ma requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    SQL> select jr_manuel, jr_mecano from jr_caisse;
     
    JR_MANUEL JR_MECANO
    --------- ---------
         3500         0
          300         0
            0       600
            0       600
          600         0
          500         0
          500       300
     
    7 ligne(s) sélectionnée(s).
    Je veux une requête qui renvoie les lignes supérieur à 0
    Si je fais ceci sur un seul champ le résultat est bon
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    SQL> select jr_manuel from jr_caisse
      2  where jr_manuel>0;
     
    JR_MANUEL
    ---------
         3500
          300
          600
          500
          500
    J'ai fais ceci mais elle n'est pas bonne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SQL> select jr_manuel, jr_mecano 
      2  from jr_caisse
      3  where jr_manuel>0 and jr_mecano>0;
     
    JR_MANUEL JR_MECANO
    --------- ---------
          500       300
    Comment dois-je écrire alors ma requête? Merci de me venir en aide.

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 654
    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 654
    Billets dans le blog
    10
    Par défaut
    Bonsoir,

    Pourquoi n'est-ce pas bon, quel résultat attendez vous ?

    Est-ce ceci que vous voulez ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    select jr_manuel, jr_mecano 
    from jr_caisse
    where jr_manuel + jr_mecano > 0

  3. #3
    Membre éclairé Avatar de sondo
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Août 2004
    Messages
    540
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Service public

    Informations forums :
    Inscription : Août 2004
    Messages : 540
    Par défaut
    Salut,
    Voilà ce que je veux : une requête qui renvoie tous les montants des deux champs excepté les lignes avec les chiffres 0.
    Merci.

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 654
    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 654
    Billets dans le blog
    10
    Par défaut
    Pour que ce soit clair, avec le jeu d'essai que vous avez présenté initialement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    JR_MANUEL JR_MECANO
    --------- ---------
         3500         0
          300         0
            0       600
            0       600
          600         0
          500         0
          500       300
    Quelles sont exactement les lignes et/ou les colonnes que vous souhaitez retenir ? fournissez une maquette du résultat

  5. #5
    Membre éclairé Avatar de sondo
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Août 2004
    Messages
    540
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Service public

    Informations forums :
    Inscription : Août 2004
    Messages : 540
    Par défaut
    Bonjour,

    J'ai essayé la requête que vous avez proposé et voilà ce que ça donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    SQL> select JR_MANUEL,JR_MECANO from jr_caisse
      2  where JR_MANUEL+JR_MECANO>0;
     
    JR_MANUEL JR_MECANO
    --------- ---------
          500         0
         4000         0
            0       600
            0       750
         3500         0
            0       150
            0       300
     
    7 ligne(s) sélectionnée(s).
    Je veux une requête qui renvoie ce résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    JR_MANUEL JR_MECANO
    --------- ---------
        500          600
        4000        750
       3500         150
                      300
    Merci d'avance

  6. #6
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 654
    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 654
    Billets dans le blog
    10
    Par défaut
    Ok, ce qui signifie que vous voulez associer le 1er montant JR_MANUEL non nul avec le premier montant JR_MECANO non nul, puis le montant JR_MANUEL non nul suivant avec le montant JR_MECANO non nul suivant, et ainsi de suite

    Pour ce genre de besoin, il faut définir un ordre , sur quelle colonne doit on trier ? faute d'ordre, le résultat sera aléatoire !
    De plus, il faut préciser la règle quand par exemple il reste des JR_MANUEL non nuls mais plus de JR_MECANO non nuls ?

  7. #7
    Membre éclairé Avatar de sondo
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Août 2004
    Messages
    540
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Service public

    Informations forums :
    Inscription : Août 2004
    Messages : 540
    Par défaut
    Salut escartefigue,

    Merci pour ton aide. Puis-je avoir un exemple?
    Merci.

  8. #8
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Essayez ainsi :
    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
    with cte_jr_manuel as
    (
    select rownum as rn, jr_manuel
      from jr_caisse
     where jr_manuel > 0
    )
      ,  cte_jr_mecano as
    (
    select rownum as rn, jr_mecano
      from jr_caisse
     where jr_mecano > 0
    )
        select ma.jr_manuel
             , me.jr_mecano
          from cte_jr_manuel ma
     full join cte_jr_mecano me on me.rn = ma.rn;

  9. #9
    Membre éclairé Avatar de sondo
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Août 2004
    Messages
    540
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Service public

    Informations forums :
    Inscription : Août 2004
    Messages : 540
    Par défaut
    Il y'a quelques erreur oracle...

    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
    SQL> with cte_jr_manuel as
    commande inconnue début "with cte_j..." - reste de la ligne ignoré.
    SQL> (
      2  select rownum as rn, jr_manuel
      3    from jr_caisse
      4   where jr_manuel > 0
      5  )
      6    ,  cte_jr_mecano as
      7  (
      8  select rownum as rn, jr_mecano
      9    from jr_caisse
     10   where jr_mecano > 0
     11  )
     12      select ma.jr_manuel
     13           , me.jr_mecano
     14        from cte_jr_manuel ma
     15   full join cte_jr_mecano me on me.rn = ma.rn;
      ,  cte_jr_mecano as
      *
    ERROR à la ligne 6 :
    ORA-00933: la commande SQL ne se termine pas correctement

  10. #10
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    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 137
    Par défaut
    Je ne suis pas certain que Oracle 10 reconnaisse les expressions de table (CTE).
    Mais rien ne t’empêche de réécrire avec des tables dérivées...
    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
    select  ma.jr_manuel
        ,   me.jr_mecano
    from    (   select  rownum as rn
                    ,   jr_manuel
                from    jr_caisse
                where   jr_manuel > 0
            )   ma
        full join
            (
                select  rownum as rn
                    ,   jr_mecano
                from    jr_caisse
                where   jr_mecano > 0
            ) me
            on  me.rn = ma.rn
    ;
    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.

  11. #11
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Les CTE sont supportées depuis la 9iR2, les CTE récursives depuis 11gR2.

    C'est peut-être SQL*Plus qui réagit mal à un caractère de saut de ligne sur le copier / coller.

  12. #12
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 654
    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 654
    Billets dans le blog
    10
    Par défaut
    Quoi qu'il en soit, je répète que sans clause ORDER BY, les résultats seront aléatoires. Rien ne garantit que 2 itérations successives de la requête produira les mêmes résultats.
    Il faut donc déterminer une (des) colonne(s) de tri, une date par exemple.

Discussions similaires

  1. Réponses: 0
    Dernier message: 10/05/2011, 10h31
  2. Réponses: 3
    Dernier message: 20/09/2010, 15h05
  3. Réponses: 16
    Dernier message: 14/06/2009, 22h12
  4. Réponses: 3
    Dernier message: 11/01/2009, 11h13
  5. Réponses: 4
    Dernier message: 14/01/2008, 00h15

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