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 :

Problème dans un UNION


Sujet :

SQL Oracle

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 560
    Points : 148
    Points
    148
    Par défaut Problème dans un UNION
    Bonjour,

    Quelqu'un sait-il pourquoi j'ai l'erreur suivante (ORA-1789) avec la requête suivante :

    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
     
    select e.num_engagement as "1",
    lp.c_id_lg_prestation as "2", 
    a.c_id_activite as "3",
    cp.c_id_composant as "4",
    i.c_id_intervention as "5",
    i.l_intervention as "6", 
    case t.C_TYP_TARIF when '1' then 'F'
    when '2' then 'PU'
    end as "7",
    ' ' as "8",
    ' ' as "9",
    t.M_FORFAIT as "10",
    t.M_PRIX_UNIT as "11",
    ' ' as "12",
    ' ' as "13",
    substr(to_char(t.d_deb_validite,'dd/mm/yyyy'),1,10) as "14",
    substr(to_char(t.d_fin_validite,'dd/mm/yyyy'),1,10) as "15"
    from engagement e
    inner join prestation p on p.c_id_engag = e.c_id_engag
    inner join composant cp on cp.c_id_composant = p.c_id_composant
    inner join activite a on a.c_id_activite = cp.c_id_activite
    inner join ligne_prestation lp on lp.c_id_prestation = p.c_id_prestation
    inner join intervention i on i.c_id_intervention = lp.c_id_intervention
    inner join tarif t on t.c_id_lg_prestation = lp.c_id_lg_prestation
    where (t.C_TYP_TARIF = '1' or t.C_TYP_TARIF = '2')
    union
    select e.num_engagement as "1",
    lp.c_id_lg_prestation as "2", 
    a.c_id_activite as "3",
    cp.c_id_composant as "4",
    i.c_id_intervention as "5",
    'FPUTC' as "7",
    ' ' as "8",
    '9999' as "9",
    tt.m_forfait  as "10",
    tt.m_prix_unit as "11",
    ' ' as "12",
    ' ' as "13",
    substr(to_char(t.d_deb_validite,'dd/mm/yyyy'),1,10) as "14",
    substr(to_char(t.d_fin_validite,'dd/mm/yyyy'),1,10) as "15"
    from engagement e
    inner join prestation p on p.c_id_engag = e.c_id_engag
    inner join composant cp on cp.c_id_composant = p.c_id_composant
    inner join activite a on a.c_id_activite = cp.c_id_activite
    inner join ligne_prestation lp on lp.c_id_prestation = p.c_id_prestation
    inner join intervention i on i.c_id_intervention = lp.c_id_intervention
    inner join tarif t on t.c_id_lg_prestation = lp.c_id_lg_prestation
    inner join tranche_tarif tt on tt.c_id_tarif = t.c_id_tarif
    where (t.C_TYP_TARIF = '3')
    and (tt.m_forfait is not null and tt.m_forfait <> 0) and (tt.m_prix_unit is not null and tt.m_prix_unit <> 0);
    Merci d'avance.

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    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 453
    Points : 18 394
    Points
    18 394
    Par défaut
    Vous utilisez pourtant le forum depuis longtemps, vous devriez savoir qu'un peu de recherche ne nuit pas.

    Votre erreur :
    ORA -1789 query block has incorrect number of result columns
    Le message est très clair, il suffit d'aller lire vos deux requêtes.

    Requête 1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    i.c_id_intervention                    AS "5",
    i.l_intervention                       AS "6", 
    case t.C_TYP_TARIF
      when '1' then 'F'
      when '2' then 'PU'
    end                                    AS "7",
    Requête 2 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    i.c_id_intervention                    AS "5",
    'FPUTC'                                AS "7",
    Sinon vous pouvez vous passer de l'union en écrivant cette requête-ci (à tester bien sûr) :
    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
    select e.num_engagement                       as "1",
           lp.c_id_lg_prestation                  as "2", 
           a.c_id_activite                        as "3",
           cp.c_id_composant                      as "4",
           i.c_id_intervention                    as "5",
           i.l_intervention                       as "6", 
           case t.c_typ_tarif
             when '1' then 'F'
             when '2' then 'PU'
             when '3' then 'FPUTC'
           end                                    as "7",
           ' '                                    as "8",
           case t.c_typ_tarif
             when '3'
             then '9999'
             else ' '
           end                                    as "9",
           case t.c_typ_tarif
             when '3'
             then tt.m_forfait
             else t.m_forfait
           end                                    as "10",
           case t.c_typ_tarif
             when '3'
             then tt.m_prix_unit
             else t.m_prix_unit
           end                                    as "11",
           ' '                                    as "12",
           ' '                                    as "13",
           to_char(t.d_deb_validite,'dd/mm/yyyy') as "14",
           to_char(t.d_fin_validite,'dd/mm/yyyy') as "15"
      from engagement e
           inner join prestation p
             on p.c_id_engag         = e.c_id_engag
           inner join composant cp
             on cp.c_id_composant    = p.c_id_composant
           inner join activite a
             on a.c_id_activite      = cp.c_id_activite
           inner join ligne_prestation lp
             on lp.c_id_prestation   = p.c_id_prestation
           inner join intervention i
             on i.c_id_intervention  = lp.c_id_intervention
           inner join tarif t
             on t.c_id_lg_prestation = lp.c_id_lg_prestation
           left outer join tranche_tarif tt
             on tt.c_id_tarif        = t.c_id_tarif
            and t.c_typ_tarif        = '3'
            and tt.m_forfait is not null
            and tt.m_forfait <> 0
            and tt.m_prix_unit is not null
            and tt.m_prix_unit <> 0
     where t.c_typ_tarif in ('1', '2', '3');

Discussions similaires

  1. Problème group by dans requete union
    Par benjisan dans le forum Requêtes et SQL.
    Réponses: 15
    Dernier message: 07/01/2008, 16h49
  2. problème de type dans une union [c#]
    Par maxdwarf dans le forum Windows Forms
    Réponses: 8
    Dernier message: 08/11/2007, 17h31
  3. problème de "collation" dans un UNION
    Par bilb0t dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 15/06/2004, 12h12
  4. Problème dans analisys Manager
    Par ien_ien23 dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 11/07/2003, 14h38
  5. Problème dans requête avec count()
    Par BadFox dans le forum Requêtes
    Réponses: 3
    Dernier message: 08/07/2003, 18h02

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