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 :

Count multiple : quelle méthode ?


Sujet :

SQL Oracle

  1. #21
    Membre émérite Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Points : 2 520
    Points
    2 520
    Par défaut
    Citation Envoyé par feldi Voir le message
    Lolo, j'ai bien lu ton PS mais il faut bien que je garde les jointures pour être sur de tester les bonnes lignes non ? Comment faire ça alors ?
    Qu'est ce que tu dois exactement faire ? La différence entre les deux tables brutes ou la différence entre les deux requêtes ?

    Il faut que tu définisses clairement ton besoin.
    ~ Lola ~

  2. #22
    Membre régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2010
    Messages
    347
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2010
    Messages : 347
    Points : 121
    Points
    121
    Par défaut
    La différence entre les 2 requêtes, pour récupérer les 307 lignes qu'il y a dans dcf qui ne sont pas dans cla avec les conditions que j'utilise pour le moment.

    PS : désolé pour ton pseudo, j'ai corrigé dans mon dernier post.

  3. #23
    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
    Bonjour,

    Mais pourquoi vouloir faire un minus / not exists ou que sais-je encore ?

    Ceci ne répond-t-il pas à votre besoin ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    SELECT cla.id_Cart, cla.num_line
    FROM cla 
    inner join dcf on dcf.idcart = cla.z_id_cart AND dcf.linequote = cla.num_line
    WHERE  cla.date1 BETWEEN '20110301' AND '20110331'
        AND cla.flag2 <> 1 
        AND cla.id_item = 'multi-produits'
        AND cla.id_item = 'price List'
        AND cla.id_item = 'simu';

  4. #24
    Membre régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2010
    Messages
    347
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2010
    Messages : 347
    Points : 121
    Points
    121
    Par défaut
    Cette requête me retourne 0 résultats.


    En fait, je fais peut être fausse route depuis le début. Je reprends :
    Cette requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    SELECT DISTINCT id_Domain, id_Cart, num_version, num_line, count(*)
    FROM cla, dcf
    where date1 between '20110301' and '20110331'
        AND flag2 = 1 
        AND id_item <> 'multi-produits'
        AND id_item <> 'price List'
        AND id_item <> 'simu'
        AND dcf.idcart = cla.z_id_cart
        AND dcf.linequote = cla.num_line
    GROUP BY id_domain, id_cart, num_version, num_line;
    me ramène 3207 lignes.
    Celle ci, sur la deuxième table :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT DISTINCT idcart, linequote, numberofevo, count(*)
    FROM dcf, cla
    where dateoffer between '2011/03/01' and '2011/03/31'
        and dcf.idcart = cla.z_id_cart
        AND dcf.linequote = cla.num_line
    GROUP BY idcart, linequote, numberofevo;
    me ramène 3514 lignes.

    Le problème étant que normalement cla contient plus de lignes que dcf hors ici c'est l'inverse.
    Et je cherche donc à savoir comment trouver ces lignes qui sont dans dcf et pas dans cla.

    Désolé si je vous ai induit en erreurs auparavant.

  5. #25
    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
    Mais est-ce que votre comparaison est pertinante ?

    Votre 1ere requête comporte différente colonne par rapport à la 2eme requête. Pour moi vous comparez des choux et des patates là.

    (au passage utilisez à la fois group by et distinct ne sert à rien, c'est soit l'un soit l'autre).

    De plus vu votre réponse j'en déduis que vos restrictions (mise à par celle sur les dates) ne servent à rien dans ce cas là, passons.

    Donc combien de ligne retourne cette requête ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    SELECT DISTINCT z_id_cart, num_line
    FROM cla, dcf
    WHERE date1 BETWEEN '20110301' AND '20110331'
        AND flag2 = 1 
        AND id_item <> 'multi-produits'
        AND id_item <> 'price List'
        AND id_item <> 'simu'
        AND dcf.idcart = cla.z_id_cart
        AND dcf.linequote = cla.num_line
    Et celle-ci ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT DISTINCT idcart, linequote
    FROM dcf, cla
    WHERE dateoffer BETWEEN '2011/03/01' AND '2011/03/31'
        AND dcf.idcart = cla.z_id_cart
        AND dcf.linequote = cla.num_line;

  6. #26
    Membre régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2010
    Messages
    347
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2010
    Messages : 347
    Points : 121
    Points
    121
    Par défaut
    3207 pour la première et 3514 pour la seconde.

  7. #27
    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
    oki,

    Donc ceci ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    SELECT DISTINCT dcf.idcart, dcf.linequote
    FROM dcf
    inner join cla on dcf.idcart = cla.z_id_cart and dcf.linequote = cla.num_line
    WHERE dateoffer BETWEEN '2011/03/01' AND '2011/03/31'
    and not exists (select null from cla b
     WHERE b.date1 BETWEEN '20110301' AND '20110331'
        AND b.flag2 = 1 
        AND b.id_item <> 'multi-produits'
        AND b.id_item <> 'price List'
        AND b.id_item <> 'simu'
        AND dcf.idcart = b..z_id_cart
        AND dcf.linequote = b..num_line);

  8. #28
    Membre régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2010
    Messages
    347
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2010
    Messages : 347
    Points : 121
    Points
    121
    Par défaut
    792 lignes.

    Mais j'ai du mal à voir à quoi correspond ce chiffre alors. ça veut dire qu'il y a 792 lignes présentes dans dcf et non dans cla ?
    Alors quid des requêtes précédentes qui montraient une différence de 307 ?

  9. #29
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Si date1, dateoffer sont bien de type date il faut réécrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    date1 BETWEEN '20110301' AND '20110331'
     
    dateoffer BETWEEN '2011/03/01' AND '2011/03/31'
    en :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    date1 BETWEEN to_date('20110301','YYYYMMDD') AND to_date('20110331','YYYYMMDD')
     
    dateoffer BETWEEN to_date('2011/03/01','YYYY/MM/DD') AND to_date('2011/03/31','YYYY/MM/DD')

  10. #30
    Membre régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2010
    Messages
    347
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2010
    Messages : 347
    Points : 121
    Points
    121
    Par défaut
    Ils sont en VARCHAR2 mais je n'ai pas de problèmes pour les dates, j'obtiens bien les infos entre le 01/03/2011 et le 30/01/2011.

  11. #31
    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
    Citation Envoyé par feldi Voir le message
    792 lignes.

    Mais j'ai du mal à voir à quoi correspond ce chiffre alors. ça veut dire qu'il y a 792 lignes présentes dans dcf et non dans cla ?
    Alors quid des requêtes précédentes qui montraient une différence de 307 ?
    Oui celà veut dire, qu'avec ces restrictions 792 lignes de dcf ne sont pas référencées dans cla.

    Notez bien que je dit "avec ces restrictions".
    On a vu qu'apparement vos critères sur le flag et id_item ne sont pas pertinant...il vous reste donc la colonne date.

    Ensuite ces deux comptages ne compte pas les même choses donc qu'ils soient différents ne me choque pas. (pour comprendre ça reprennez l'exemple de lola qui était assez bien fait)

Discussions similaires

  1. Quelles méthodes utiliser ?
    Par Ekinoks dans le forum OpenGL
    Réponses: 2
    Dernier message: 29/09/2005, 14h45
  2. Réponses: 4
    Dernier message: 05/06/2005, 14h05
  3. [C#] Form : Quelles méthodes ? Close, Dispose, Show, Hide
    Par TheSeb dans le forum Windows Forms
    Réponses: 9
    Dernier message: 30/05/2005, 16h42
  4. [persistance]Quelle méthode utiliser ?
    Par le Daoud dans le forum Persistance des données
    Réponses: 9
    Dernier message: 15/11/2004, 09h29
  5. code récurrent, quelle méthode utiliser ?
    Par khayyam90 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 10/10/2004, 15h03

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