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 :

Fusionner 2 requêtes en 1 bis [10g]


Sujet :

SQL Oracle

  1. #1
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juillet 2006
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2006
    Messages : 33
    Points : 22
    Points
    22
    Par défaut Fusionner 2 requêtes en 1 bis
    Bonsoir,

    Me voici de retour avec une nouvelle demande, après l'excellent coup de pouce que vous m'avez donné.
    Je souhaite de nouveau fusionner la requête que vous m'avez déjà réalisée avec cette nouvelle, afin d'en obtenir plus qu'une, si cela est possible
    Je vous en remercie.

    Cordialement
    Laurent

    Requête1
    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
    select B.cd_cost_center
           , substr(A.cd_box, 1, 4) as eqpts
           , substr(sum(case when B.cd_action_type in ('PREV', 'PREV_N_PRO', 'INTERV_PRO') then C.pr_hour_cost * C.tm_occupation else 0 end) / 100000, 1, 6) as tot_PREV
           , substr(sum(case when B.cd_action_type = 'CUR'                                 then C.pr_hour_cost * C.tm_occupation else 0 end) / 100000, 1, 6) as tot_Cur
        from WO         A
        join WS         B  on B.cd_wo = A.cd_wo
        join OCCUPATION C  on C.cd_wo = A.cd_wo
                          and C.cd_ws = B.cd_ws
       where B.dt_ws_begin >= to_date('01022015 00:00:01','DDMMYYYY HH24:MI:SS')
         and B.dt_ws_begin <= to_date('28022015 23:59:59','DDMMYYYY HH24:MI:SS')
         and B.cd_action_type in ('CUR', 'PREV', 'PREV_N_PRO', 'INTERV_PRO')
    group by B.cd_cost_center
           , substr(A.cd_box, 1, 4)
    order by B.cd_cost_center       asc
           , substr(A.cd_box, 1, 4) asc
    Résultat de la requête 1

    CD_COST_CENTER EQPTS TOT_PR TOT_CU
    -------------------- ----- ------ ------
    valeur A valeur B Valeur C Valeur D


    Requête2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    select D.cd_cost_center, substr(B.cd_box,1, 9) eqpts, substr(abs(sum(D.pr_externe)),1, 8) cout_pieces
    from stock_mouvemt D, item E, ws B
    where dttm_stock_mvt
    between to_date('01/03/2015 00:00:01','DD/MM/YYYY HH24:MI:SS')
    and to_date('31/03/2015 23:59:59','DD/MM/YYYY HH24:MI:SS')
    and cd_mvt_type like'S%'
    and E.cd_item(+) = D.cd_item
    and B.cd_wo = D.cd_wo
    and B.cd_ws = D.cd_ws
    group by B. cd_box, D.cd_cost_center
    order by 1, 2
    Résultat de la requête2

    CD_COST_CENTER EQPTS COUT_PIE
    -------------------- --------- --------
    valeur A valeur B valeur E



    Requête résultat souhaitée

    CD_COST_CENTER EQPTS TOT_PR TOT_CU COUT_PIE
    -------------------- ----- ------ ------ --------
    valeur A valeur B Valeur C Valeur D valeur E

  2. #2
    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
    Dans ce message j'avais indiqué la méthode générale pour regrouper deux requêtes.

    Je vous invite à l'essayer.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juillet 2006
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2006
    Messages : 33
    Points : 22
    Points
    22
    Par défaut
    Citation Envoyé par Waldar Voir le message
    Dans ce message j'avais indiqué la méthode générale pour regrouper deux requêtes.

    Je vous invite à l'essayer.
    Bonjour,

    Après plusieurs essais infructueux en essayant d'appliquer la méthode, je me retrouve dans une impasse avec les 2 requêtes suivantes qui pourraient peut être faire l 'affaire, quoique ????

    1ère requête: "message aucune ligne sélectionnée"
    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
    select ws.cd_cost_center
           , substr(wo.cd_box, 1, 4) as eqpts
           , substr(sum(case when ws.cd_action_type in ('PREV', 'PREV_N_PRO', 'INTERV_PRO') then occupation.pr_hour_cost * occupation.tm_occupation else 0 end) / 100000, 1, 6) as tot_PREV
           , substr(sum(case when ws.cd_action_type = 'CUR'                                 then occupation.pr_hour_cost * occupation.tm_occupation else 0 end) / 100000, 1, 6) as tot_Cur
           , substr(abs(sum(stock_mouvemt.pr_externe)),1, 8) as cout_pieces
        from Wo wo
         join WS         ws          on ws.cd_wo = wo.cd_wo
         join OCCUPATION OCCUPATION  on occupation.cd_wo = wo.cd_wo
                                     and occupation.cd_ws = ws.cd_ws
    join stock_mouvemt stock_mouvemt on stock_mouvemt.cd_wo = ws.cd_wo
                                     and stock_mouvemt.cd_ws = ws.cd_ws
                           join ITEM on stock_mouvemt.cd_item = item.cd_item
       where ws.dt_ws_begin >= to_date('01022015 00:00:01','DDMMYYYY HH24:MI:SS')
         and ws.dt_ws_begin <= to_date('28022015 23:59:59','DDMMYYYY HH24:MI:SS')
         and ws.cd_action_type in ('CUR', 'PREV', 'PREV_N_PRO', 'INTERV_PRO')
         and stock_mouvemt.dttm_stock_mvt >= to_date('01/02/2015 00:00:01','DD/MM/YYYY HH24:MI:SS')
         and stock_mouvemt.dttm_stock_mvt <= to_date('28/02/2015 00:00:01','DD/MM/YYYY HH24:MI:SS')
         and cd_mvt_type like'S%'
    group by ws.cd_cost_center
           , substr(wo.cd_box, 1, 4)
    order by ws.cd_cost_center       asc
           , substr(wo.cd_box, 1, 4) asc
    2ème requête: "message ERREUR à la ligne 1 : ORA-00979: n'est pas une expression GROUP BY"
    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
    select ws.cd_cost_center, stock_mouvemt.cd_cost_center
           , substr(wo.cd_box, 1, 4) as eqpts
           , substr(sum(case when ws.cd_action_type in ('PREV', 'PREV_N_PRO', 'INTERV_PRO') then occupation.pr_hour_cost * occupation.tm_occupation else 0 end) / 100000, 1, 6) as tot_PREV
           , substr(sum(case when ws.cd_action_type = 'CUR'                                 then occupation.pr_hour_cost * occupation.tm_occupation else 0 end) / 100000, 1, 6) as tot_Cur
           , substr(abs(sum(stock_mouvemt.pr_externe)),1, 8) as cout_pieces
        from Wo wo
        join WS         ws           on ws.cd_wo = wo.cd_wo
        join OCCUPATION OCCUPATION   on occupation.cd_wo = wo.cd_wo
                                     and occupation.cd_ws = ws.cd_ws
    join stock_mouvemt stock_mouvemt on stock_mouvemt.cd_wo = ws.cd_wo
                                     and stock_mouvemt.cd_ws = ws.cd_ws
                           join ITEM on stock_mouvemt.cd_item = item.cd_item
       where ws.dt_ws_begin >= to_date('01022015 00:00:01','DDMMYYYY HH24:MI:SS')
         and ws.dt_ws_begin <= to_date('28022015 23:59:59','DDMMYYYY HH24:MI:SS')
         and ws.cd_action_type in ('CUR', 'PREV', 'PREV_N_PRO', 'INTERV_PRO')
         and stock_mouvemt.dttm_stock_mvt >= to_date('01/02/2015 00:00:01','DD/MM/YYYY HH24:MI:SS')
         and stock_mouvemt.dttm_stock_mvt <= to_date('28/02/2015 00:00:01','DD/MM/YYYY HH24:MI:SS')
         and cd_mvt_type like'S%'
    group by ws.cd_cost_center
           , substr(wo.cd_box, 1, 4)
    order by ws.cd_cost_center       asc
           , substr(wo.cd_box, 1, 4) asc
    Est ce qu'il serait possible, s'il vous plaît, de m 'aiguiller sur mes erreurs.

    Je vous en remercie.

    Cordialement
    Laurent

  4. #4
    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
    Non, l'autre méthode ! Avec le With et le UNION ALL.

    Là vos deux requêtes n'ont rien à voir, ce ne sont pas les mêmes tables vous ne pouvez pas les fusionner comme dans l'autre sujet.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juillet 2006
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2006
    Messages : 33
    Points : 22
    Points
    22
    Par défaut
    Citation Envoyé par Waldar Voir le message
    Non, l'autre méthode ! Avec le With et le UNION ALL.

    Là vos deux requêtes n'ont rien à voir, ce ne sont pas les mêmes tables vous ne pouvez pas les fusionner comme dans l'autre sujet.
    Bonsoir,

    Après plusieurs essais (casse tête chinois pour moi), je ne dois plus être très loin de la solution, j'arrive bien à avoir mes données, mais je n'arrive pas à les grouper sur la même ligne par "cost_center".

    Voilà le résulat

    Nom : resultat.jpg
Affichages : 344
Taille : 28,2 Ko


    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
    with cte_union (cost_center, eqpts, tot_PREV, tot_cur, cout_pieces) as
    (
    select ws.cd_cost_center cost_center
           , substr(ws.cd_box, 1, 4) eqpts
           , substr(sum(case when ws.cd_action_type in ('PREV', 'PREV_N_PRO', 'INTERV_PRO') then OCCUPATION.pr_hour_cost * OCCUPATION.tm_occupation else 0 end) / 100000, 1, 6) tot_PREV
           , substr(sum(case when ws.cd_action_type = 'CUR'                                 then OCCUPATION.pr_hour_cost * OCCUPATION.tm_occupation else 0 end) / 100000, 1, 6) tot_Cur
           , null cout_pieces
    from Ws
        join OCCUPATION   on OCCUPATION.cd_wo = ws.cd_wo
                          and OCCUPATION.cd_ws = ws.cd_ws
       where ws.dt_ws_begin >= to_date('01022015 00:00:01','DDMMYYYY HH24:MI:SS')
         and ws.dt_ws_begin <= to_date('28022015 23:59:59','DDMMYYYY HH24:MI:SS')
         and ws.cd_action_type in ('CUR', 'PREV', 'PREV_N_PRO', 'INTERV_PRO')
    group by ws.cd_cost_center, substr(ws.cd_box, 1, 4)
    union all
    select stock_mouvemt.cd_cost_center cost_center, substr(ws.cd_box,1, 4) eqpts,null tot_prev, null tot_cur, substr(abs(sum(stock_mouvemt.pr_externe)),1, 8) cout_pieces
    from ws
    join stock_mouvemt on ws.cd_wo = stock_mouvemt.cd_wo
    and ws.cd_ws = stock_mouvemt.cd_ws
    join item on item.cd_item = stock_mouvemt.cd_item
    where stock_mouvemt.dttm_stock_mvt >= to_date('01022015 00:00:01','DDMMYYYY HH24:MI:SS')
    and stock_mouvemt.dttm_stock_mvt <= to_date('28022015 23:59:59','DDMMYYYY HH24:MI:SS')
    and stock_mouvemt.cd_mvt_type like'S%'
    group by stock_mouvemt.cd_cost_center, substr(ws.cd_box, 1, 4)
    )
    select cost_center, eqpts, tot_PREV, tot_cur, cout_pieces from cte_union
    order by cost_center, eqpts
    Est ce qu'il serait possible de m'aider, s'il vous plaît.

    Je vous en remercie.

    Cordialement

    Laurent

  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
    Il manque la dernière étape :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      select A, B, max(C) as C, max(D) as D
        from cte_union 
    group by A, B;

  7. #7
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 053
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 053
    Points : 9 392
    Points
    9 392
    Par défaut
    Citation Envoyé par laurent7474 Voir le message
    Bonsoir,

    Après plusieurs essais (casse tête chinois pour moi), je ne dois plus être très loin de la solution, j'arrive bien à avoir mes données, mais je n'arrive pas à les grouper sur la même ligne par "cost_center".

    Voilà le résulat

    Nom : resultat.jpg
Affichages : 344
Taille : 28,2 Ko


    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
    with cte_union (cost_center, eqpts, tot_PREV, tot_cur, cout_pieces) as
    (
    select ws.cd_cost_center cost_center
           , substr(ws.cd_box, 1, 4) eqpts
           , substr(sum(case when ws.cd_action_type in ('PREV', 'PREV_N_PRO', 'INTERV_PRO') then OCCUPATION.pr_hour_cost * OCCUPATION.tm_occupation else 0 end) / 100000, 1, 6) tot_PREV
           , substr(sum(case when ws.cd_action_type = 'CUR'                                 then OCCUPATION.pr_hour_cost * OCCUPATION.tm_occupation else 0 end) / 100000, 1, 6) tot_Cur
           , null cout_pieces
    from Ws
        join OCCUPATION   on OCCUPATION.cd_wo = ws.cd_wo
                          and OCCUPATION.cd_ws = ws.cd_ws
       where ws.dt_ws_begin >= to_date('01022015 00:00:01','DDMMYYYY HH24:MI:SS')
         and ws.dt_ws_begin <= to_date('28022015 23:59:59','DDMMYYYY HH24:MI:SS')
         and ws.cd_action_type in ('CUR', 'PREV', 'PREV_N_PRO', 'INTERV_PRO')
    group by ws.cd_cost_center, substr(ws.cd_box, 1, 4)
    union all
    select stock_mouvemt.cd_cost_center cost_center, substr(ws.cd_box,1, 4) eqpts,null tot_prev, null tot_cur, substr(abs(sum(stock_mouvemt.pr_externe)),1, 8) cout_pieces
    from ws
    join stock_mouvemt on ws.cd_wo = stock_mouvemt.cd_wo
    and ws.cd_ws = stock_mouvemt.cd_ws
    join item on item.cd_item = stock_mouvemt.cd_item
    where stock_mouvemt.dttm_stock_mvt >= to_date('01022015 00:00:01','DDMMYYYY HH24:MI:SS')
    and stock_mouvemt.dttm_stock_mvt <= to_date('28022015 23:59:59','DDMMYYYY HH24:MI:SS')
    and stock_mouvemt.cd_mvt_type like'S%'
    group by stock_mouvemt.cd_cost_center, substr(ws.cd_box, 1, 4)
    )
    select cost_center, eqpts, tot_PREV, tot_cur, cout_pieces from cte_union
    order by cost_center, eqpts
    Est ce qu'il serait possible de m'aider, s'il vous plaît.

    Je vous en remercie.

    Cordialement

    Laurent
    SQL, c'est comme un jeu de légo. Tu as des briques, et c'est à toi de les assembler.

    Ici, tu as 2 briques ( 2 requêtes), et tu as choisi de les assembler en les mettant l'une au dessus de l'autre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select * from XXX
    UNION
    Select * from yyy
    Ce que tu veux, ce n'est plus mettre tes 2 briques l'une au dessus de l'autre, mais les mettre cote à cote.

    Tu dois donc faire un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select X.*, Y.*
    from 
    ( select * from xxx ) X,
    ( select * from yyy ) Y
    where X.cost_center = y.cost_center
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  8. #8
    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
    Citation Envoyé par tbc92 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select X.*, Y.*
    from 
    ( select * from xxx ) X,
    ( select * from yyy ) Y
    where X.cost_center = y.cost_center
    Sérieusement ?
    Lisez au moins le sujet avant de répondre.

  9. #9
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juillet 2006
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2006
    Messages : 33
    Points : 22
    Points
    22
    Par défaut
    Bonjour,

    Je suis apparement arrivé au résultat, mais c'est vraiment du pifomètre.

    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
    with cte_union (cost_center, eqpts, tot_PREV, tot_cur, cout_pieces) as
    (
    select ws.cd_cost_center cost_center
           , substr(ws.cd_box, 1, 4) eqpts
           , substr(sum(case when ws.cd_action_type in ('PREV', 'PREV_N_PRO', 'INTERV_PRO') then OCCUPATION.pr_hour_cost * OCCUPATION.tm_occupation else 0 end) / 100000, 1, 6) tot_PREV
           , substr(sum(case when ws.cd_action_type = 'CUR'                                 then OCCUPATION.pr_hour_cost * OCCUPATION.tm_occupation else 0 end) / 100000, 1, 6) tot_Cur
           , null cout_pieces
    from Ws
        join OCCUPATION   on OCCUPATION.cd_wo = ws.cd_wo
                          and OCCUPATION.cd_ws = ws.cd_ws
       where ws.dt_ws_begin >= to_date('01022015 00:00:01','DDMMYYYY HH24:MI:SS')
         and ws.dt_ws_begin <= to_date('28022015 23:59:59','DDMMYYYY HH24:MI:SS')
         and ws.cd_action_type in ('CUR', 'PREV', 'PREV_N_PRO', 'INTERV_PRO')
    group by ws.cd_cost_center, substr(ws.cd_box, 1, 4)
    union all
    select stock_mouvemt.cd_cost_center cost_center, substr(ws.cd_box,1, 4) eqpts,null tot_prev, null tot_cur, substr(abs(sum(stock_mouvemt.pr_externe)),1, 8) cout_pieces
    from ws
    join stock_mouvemt on ws.cd_wo = stock_mouvemt.cd_wo
    and ws.cd_ws = stock_mouvemt.cd_ws
    join item on item.cd_item = stock_mouvemt.cd_item
    where stock_mouvemt.dttm_stock_mvt >= to_date('01022015 00:00:01','DDMMYYYY HH24:MI:SS')
    and stock_mouvemt.dttm_stock_mvt <= to_date('28022015 23:59:59','DDMMYYYY HH24:MI:SS')
    and stock_mouvemt.cd_mvt_type like'S%'
    group by stock_mouvemt.cd_cost_center, substr(ws.cd_box, 1, 4)
    )
    select max(cost_center) as cost_center, max (eqpts) as eqpts, max(tot_PREV) as tot_PREV, max(tot_Cur) as tot_Cur, max(cout_pieces) as cout_pieces from cte_union
    group by cost_center, eqpts
    order by cost_center, eqpts
    Cordialement

    Laurent

  10. #10
    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
    C'est correct, à part les agrégats dans le select sur les colonnes du group by (ce n'est pas faux, mais c'est inutile).

    Par contre, je ne comprends pas le côté pifomètre car c'est exactement la méthode que je vous avais indiquée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    with cte_union (A, B, C, D) as
    (
    select A, B, C, null
      from table1
     union all
    select A, B, null, D
      from table2
    )
      select A, B, max(C) as C, max(D) as D
        from cte_union 
    group by A, B;

  11. #11
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juillet 2006
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2006
    Messages : 33
    Points : 22
    Points
    22
    Par défaut
    Citation Envoyé par Waldar Voir le message
    C'est correct, à part les agrégats dans le select sur les colonnes du group by (ce n'est pas faux, mais c'est inutile).

    Par contre, je ne comprends pas le côté pifomètre car c'est exactement la méthode que je vous avais indiquée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    with cte_union (A, B, C, D) as
    (
    select A, B, C, null
      from table1
     union all
    select A, B, null, D
      from table2
    )
      select A, B, max(C) as C, max(D) as D
        from cte_union 
    group by A, B;

    Bonsoir,

    C'est surtout le hasard d'avoir trouvé en ayant essayé, je ne sais pas combien de requète. Car remettre la méthode dans le contexte, avec très peu de notions ou de formations en sql, pour moi cela relève du défi. Surtout dans une entreprise qui a largement de quoi payer des formations à ses employés.
    Heureusement que le forum est là, merci encore pour votre aide.

    Cordialement

    Laurent

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

Discussions similaires

  1. fusionner des requêtes
    Par bourguignon21 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 11/07/2007, 10h54
  2. [Oracle 9i] Fusionner 2 requêtes
    Par supermarsu dans le forum Langage SQL
    Réponses: 2
    Dernier message: 22/05/2007, 08h52
  3. [MySQL] Fusionner deux requêtes
    Par jpascal dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 27/12/2006, 01h51
  4. Fusionner des requêtes
    Par SwiTz dans le forum Requêtes
    Réponses: 4
    Dernier message: 08/11/2005, 22h00
  5. Fusionner 3 requêtes avec un SUM en une seule
    Par David Guillouet dans le forum Langage SQL
    Réponses: 3
    Dernier message: 28/07/2004, 15h54

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