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 :

Probleme count(*) dans une requête


Sujet :

SQL Oracle

  1. #1
    Nouveau membre du Club
    Inscrit en
    Juin 2007
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 47
    Points : 25
    Points
    25
    Par défaut Probleme count(*) dans une requête
    Bonjour,

    J'ai une requête SQL qui me pose quelques soucis à l'exécution.
    Elle permet de vérifier certains champs n'existent pas ou ne sont pas remplis pour une liste de matériel.

    Cette requête fonctionne correctement lorsque je demande le détail des résultats(en rouge) mais pas quand je fais un count(*) sur cette requête.

    Avec le count(*), je sors 700 lignes alors qu'avec le détail, je n'en ai que 28.
    Je ne comprends pas d'ou vient cette incohérence.

    Voici la 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
    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
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
     
    select count(*) from (
    SELECT 
    decode(tab_result.typ, 2, FUNC.cc2,
                                   37, FUNC.cc3) cc,
    tab_result.nid ,
    tab_result.sect ,
    tab_result.nom ,
    tab_result.codif ,
    tab_result.m_sys,
    tab_result.m_aer,
    tab_result.m_tech,
    tab_result.m_ll
    FROM
    (
        SELECT
            tabl.cle,
            tabl.typ,
            tabl.nid,
            tabl.nom,
            tabl.sect,
            tabl.codif,
            max(tabl.m_sys) m_sys,
            max(tabl.m_aer)  m_aer,
            max(tabl.m_tech)  m_tech,
            max(tabl.m_ll) m_ll
        FROM (    
            SELECT
            N.cle,
            N.typ,
            N.nid,
            N.nom,
            N.sect,
            D.codif,
            null  m_sys,
            null  m_aer,
            null  m_tech,
            null  m_ll
            FROM MAT  N INNER JOIN
                 SIM D ON substr(N.nid, -2) = D.codif
            WHERE D.codifu = :param 
            and N.typ in (2,37)
            
            UNION
        
            SELECT
            N1.cle,
            N1.typ,
            N1.nid,
            N1.nom,
            N1.sect,
            D1.codif,
            null  m_sys,
            null  m_aer,
            null  m_tech,
            CHARE_LL.CARAC_N2  m_ll
            FROM MAT N1 LEFT OUTER JOIN
                 CHARE CHARE_LL ON N1.cle = CHARE_LL.cle INNER JOIN
                 SIM D1 ON substr(N1.nid, -2) = D1.codif
            WHERE D1.codifu = :param AND (CHARE_LL.CARAC_N1 = 'Maintenance LL')
            AND N1.typ in (2,37)
            
            UNION
            
            SELECT
            N2.cle,
            N2.typ,
            N2.nid,
            N2.nom,
            N2.sect,
            D2.codif,
            null  m_sys,
            null  m_aer,
            CHARE_Tec.CARAC_N2  m_tech,
            null  m_ll
            FROM MAT N2 LEFT OUTER JOIN
                 CHARE CHARE_Tec ON N2.cle = CHARE_Tec.cle INNER JOIN
                 SIM D2 ON substr(N2.nid, -2) = D2.codif
            WHERE D2.codifu = :param AND (CHARE_Tec.CARAC_N1 = 'Maintenance Environnement Technique')
            and N2.typ in (2,37)
            
            UNION
            
            SELECT
            N3.cle,
            N3.typ,
            N3.nid,
            N3.nom,
            N3.sect,
            D3.codif,
            null  m_sys,
            CHARE_Aer.CARAC_N2  m_aer,
            null  m_tech,
            null  m_ll
            FROM MAT N3 LEFT OUTER JOIN
                 CHARE CHARE_Aer ON N3.cle = CHARE_Aer.cle INNER JOIN
                 SIM D3 ON substr(N3.nid, -2) = D3.codif
            WHERE D3.codifu = :param AND (CHARE_Aer.CARAC_N1 = 'Maintenance des Aériens')
            and N3.typ in (2,37)
            
            UNION
            
            SELECT
            N4.cle,
            N4.typ,
            N4.nid,
            N4.nom,
            N4.sect,
            D4.codif,
            CHARE_Syst.CARAC_N2  m_sys,
            null  m_aer,
            null  m_tech,
            null  m_ll
            FROM MAT N4 LEFT OUTER JOIN
                 CHARE CHARE_Syst ON N4.cle = CHARE_Syst.cle INNER JOIN
                 SIM D4 ON substr(N4.nid, -2) = D4.codif
            WHERE D4.codifu = :param AND (CHARE_Syst.CARAC_N1 = 'Maintenance Système')
            and N4.typ in (2,37)
          ) tabl inner join
               MAT_state on MAT_state.cle = tabl.cle
          where MAT_state.STATE_KEY = 3
          group by 
            tabl.cle,
            tabl.typ,
            tabl.nid,
            tabl.nom,
            tabl.sect,
            tabl.codif
          having (max(tabl.m_aer) is null or max(tabl.m_sys) is null 
                     or max(tabl.m_tech) is null or max(tabl.m_ll) is null)
    order by tabl.cle
    ) tab_result inner join
       FUNC on tab_result.cle = FUNC.cle and tab_result.typ = FUNC.typ
    )
    information sur l'environnement :
    Oracle 10g R2 sur Linux

    [FONT=Verdana]Toute aide sera la bienvenue.[/FONT]
    Merci

  2. #2
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    qu'avec le détail, je n'en ai que 28.
    T'es allé jusqu'au bout du curseur ?

    Souvent, c'est un problème d'utilisation de TOAD (Le résultat est dans une grille et Toad n'affiche que les lignes par groupe de 25.)
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  3. #3
    Nouveau membre du Club
    Inscrit en
    Juin 2007
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 47
    Points : 25
    Points
    25
    Par défaut
    J'utilise sql developper et je vais bien au bout de la grille.

  4. #4
    Nouveau membre du Club
    Inscrit en
    Juin 2007
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 47
    Points : 25
    Points
    25
    Par défaut
    Le problème semble se situer au niveau du travail en mémoire dans la zone
    tabl.
    Je passe par une table intermediaire temporaire et les résultats sont corrects
    pour l'instant.
    Je clôture le post après plus de tests.

  5. #5
    Nouveau membre du Club
    Inscrit en
    Juin 2007
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 47
    Points : 25
    Points
    25
    Par défaut
    En fin de compte, j'en passe par 2 tables intermédiaires.
    La première contient les résultats de tabl.
    La seconde contient les résultats de tab_result.
    En attendant mieux, cela fonctionne.

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

Discussions similaires

  1. [ODBC] Faire la somme d'un count dans une requête
    Par razily dans le forum PHP & Base de données
    Réponses: 0
    Dernier message: 16/06/2010, 11h57
  2. Ensemble de count dans une requête
    Par grunk dans le forum Requêtes
    Réponses: 2
    Dernier message: 15/04/2010, 09h52
  3. Critère sur Count dans une Requête Croisée
    Par Nana35 dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 03/12/2008, 11h46
  4. 2 count dans une requête
    Par illegalsene dans le forum Langage SQL
    Réponses: 1
    Dernier message: 30/11/2007, 18h20
  5. [MySQL] Deux COUNT dans une requête
    Par ecchymose dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 05/07/2007, 23h24

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