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 :

Construction d'une requête


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Octobre 2004
    Messages
    345
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 345
    Par défaut Construction d'une requête
    Bonjour,

    j'ai deux tables (t1,t2) ayant la meme structure ,une autre (t3)
    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
     
    t1: {num_ord,qtebase,cru,nat}
    t2: {num_ord,qtebase,cru,nat}
    t3:{cru}
     
    je voudrais  pour chaque cru de t3 calculer la qtebase sachant que 
     
    si nat : 4 je recupere l'info de t1
    si nat : 10 je recupere l'info de t2
     
    si nat : 1 je recupere l'info de t1
    si nat : 15 je recupere l'info de t2
     
    4,10 : represente un seul groupe de nature ex : nouveau
    1,15  :represente un seul groupe de nature ex : ancien

    resultat voulu sous forme de tableau croise:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
                  cru1    cru2     cru3   cru4     total
    nouveau   10      25         20     20        75
    ancien      5       25          10     10        50
    total        15      50          30     30        125
    Cordialement,

  2. #2
    Membre Expert Avatar de ojo77
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Décembre 2010
    Messages
    680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2010
    Messages : 680
    Par défaut
    Si je comprends votre question, il y a un souci de modélisation : nat devrait se trouver dans T3 et ni dans T2 ni dans T1.

    En imaginant que nat soit dans t3, la requête devient :

    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
    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
    select c1
         , sum ( case when nat in ( 4, 1) then decode(cru,'cru1',t1qb,0) 
                      when nat in (10,15) then decode(cru,'cru1',t2qb,0)
                      else null
                      end ) cru1				  
         , sum ( case when nat in ( 4, 1) then decode(cru,'cru2',t1qb,0) 
                      when nat in (10,15) then decode(cru,'cru2',t2qb,0)
                      else null
                      end ) cru2				  
         , sum ( case when nat in ( 4, 1) then decode(cru,'cru3',t3qb,0) 
                      when nat in (10,15) then decode(cru,'cru3',t3qb,0)
                      else null
                      end ) cru3
         , sum ( case when nat in ( 4, 1) then decode(cru,'cru4',t1qb,0) 
                      when nat in (10,15) then decode(cru,'cru4',t2qb,0)
                      else null
                      end ) cru4
         , sum ( case when nat in ( 4, 1) then t1qb, 
                      when nat in (10,15) then t2qb
                      else null
                      end ) total
    from ( select case when t3.nat in ( 4, 10) then 'nouveau'
                       when t3.nat in ( 1, 15) then 'ancien' 
                       else null
                       end c1
                , t1.qtebase t1qb
                , t2.qtebase t2qb
                , t3.cru cru
                , t3.nat nat
           from t1 inner join
                t2 on t1.cru=t2.cru inner join 
    			t3 on t1.cru=t3.cru ) t
    group by c1 
    union all 
    select c1
         , sum ( case when nat in ( 4, 1) then decode(cru,'cru1',t1qb,0) 
                      when nat in (10,15) then decode(cru,'cru1',t2qb,0)
                      else null
                      end ) cru1				  
         , sum ( case when nat in ( 4, 1) then decode(cru,'cru2',t1qb,0) 
                      when nat in (10,15) then decode(cru,'cru2',t2qb,0)
                      else null
                      end ) cru2				  
         , sum ( case when nat in ( 4, 1) then decode(cru,'cru3',t3qb,0) 
                      when nat in (10,15) then decode(cru,'cru3',t3qb,0)
                      else null
                      end ) cru3
         , sum ( case when nat in ( 4, 1) then decode(cru,'cru4',t1qb,0) 
                      when nat in (10,15) then decode(cru,'cru4',t2qb,0)
                      else null
                      end ) cru4
         , sum ( case when nat in ( 4, 1) then t1qb, 
                      when nat in (10,15) then t2qb
                      else null
                      end ) total
    from ( select 'total' c1
                , t1.qtebase t1qb
                , t2.qtebase t2qb
                , t3.cru cru
                , t3.nat nat
           from t1 inner join
                t2 on t1.cru=t2.cru inner join 
    			t3 on t1.cru=t3.cru ) t
    group by c1;

  3. #3
    Membre éclairé
    Inscrit en
    Octobre 2004
    Messages
    345
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 345
    Par défaut
    Bonjour,

    il n'y a pas de souci de modelisation les tables sont faites comme ça
    pouvez m'aider dans ce sens la

    Cordialement,

  4. #4
    Membre Expert Avatar de ojo77
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Décembre 2010
    Messages
    680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2010
    Messages : 680
    Par défaut
    Alors il faut quelques infos complémentaires :

    Pour un "cru" donné, l'info est-elle bien répartie dans les tables T1 et T2 en fonction du "nat" ? C'est à dire si cru=cru1 est-ce qu'on trouve les nat 1 et 4 seulement dant t1 et les nat 10 et 15 seulement dans T2 ?

    Si la réponse à la question précédente est négative comment priorise-t-on une table (t1 ou t2) par rapport à l'autre ?

    Mes questions sont-elles claires ?

  5. #5
    Membre éclairé
    Inscrit en
    Octobre 2004
    Messages
    345
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 345
    Par défaut
    pour cru 1 exite dans les deux tables t1 et t2
    si nat =4 je recupere l'info de sum(t1.qtebase) et si nat =10 je recup de sum(t2.qtebase)
    donc pour nat 4 et 10 represente 1 et 1 seul groupe et donc pour chaque groupe de nature en calcul la somme de quantite existant au niveau t1 et t2

    cru 1 = t1.qtebase + t2.qtebase

    si toutefois vous avez besoin de plus d'info je suis la

    encore merci

  6. #6
    Membre Expert Avatar de ojo77
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Décembre 2010
    Messages
    680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2010
    Messages : 680
    Par défaut
    Je repose la question :

    Si cru=cru1 est-ce qu'on trouve les nat 1 et 4 seulement dant t1 et les nat 10 et 15 seulement dans T2 ? (même question pour toutes les valeurs de cru )

Discussions similaires

  1. Construction d'une requête un peu complexe
    Par dauphin34000 dans le forum SQL
    Réponses: 9
    Dernier message: 24/05/2007, 11h43
  2. [MySQL] Erreur lors de la construction d'une requête
    Par gaetan24 dans le forum PHP & Base de données
    Réponses: 23
    Dernier message: 06/04/2007, 15h45
  3. Réponses: 1
    Dernier message: 14/02/2007, 15h51
  4. [Conception] Construction d'une requête
    Par enidnalb dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 14/12/2006, 08h59
  5. Construction d'une requête imbriquée
    Par gudul dans le forum SQL
    Réponses: 20
    Dernier message: 03/07/2006, 10h57

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