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 :

SOS vue tres complexe !..(commande voiture d'un concessionaire)


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de scofield
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2006
    Messages
    179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2006
    Messages : 179
    Par défaut SOS vue tres complexe !..(commande voiture d'un concessionaire)
    bonjour, BD 9.2i (developper 10g)
    j'ai 4 tables dans ma base véhicule , commande, client et régime
    seulement voila : les voiture en 3type de prix
    1-TTC
    2-investisseur
    3-ancien combattant(avantage sociale)
    dispo dans la table véhicule :ces prix corresponde chacun au régime correspondant.

    **pour implémenter ca,sur une forme (les commandes).je doit faire une vue dynamique(détail commande): qui

    -pourra mettre le prix de la voiture ainsi que les autres infos récupérée depuis les tables client , commande , véhicule et régime.

    de facon a ce que la colonne prix ramenée dépendra du régime situé dans la commande (clé étrangère référence de la table régime).
    GENRE(c'est ici qui faut m'aider)
    select a.num_comd,a.date,b.des_vehicl,b.num_vehicl,c.nom_cli,j.regime ,b.||(select des_regm from regime where command.regim =regim.code_regm)
    from commande a, vehicule b,client c, regim j
    --de sorte que regim.des_regm correspond exactement au nom d'une des colonne prix (ttc ,invest etc..)
    help ME si quelqu'un peut me conseiller

    voila j crois que j'ai tout dit ,sinon je vous donnerai les 4 tables au cas ou!

    PS: nul en syntaxe

  2. #2
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    ta requête est très moche avec la sous-requête dans la clause SELECT

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    select a.num_comd,a.date,b.des_vehicl,b.num_vehicl,c.nom_cli,j.regime ,j.des_regm,b.prix_ttc 
    from commande a, vehicule b,client c, regim j
    where command.regim =regim.code_regm
    and regim.des_regm = 'ttc'
    UNION ALL
    select a.num_comd,a.date,b.des_vehicl,b.num_vehicl,c.nom_cli,j.regime ,j.des_regm,b.prix_invest
    from commande a, vehicule b,client c, regim j
    where command.regim =regim.code_regm
    and regim.des_regm = 'invest'
    UNION ALL
    select a.num_comd,a.date,b.des_vehicl,b.num_vehicl,c.nom_cli,j.regime ,j.des_regm,b.prix_anciencombattant
    from commande a, vehicule b,client c, regim j
    where command.regim =regim.code_regm
    and regim.des_regm = 'anciencombattant'
    tu n'aurais pas ce problème si le modéle de données était correct avec une table prix avec une colonne TYPE ou au moins une ligne par couple (véhicule,type).

    Plutôt qu'une table véhicule avec (véhicule, prix1,prix2,prix3) j'aurais vu (véhicule, prix, type).

    Comme souvent, c'est un problème de modéle et pas de programmation... parce que même si tu peux t'en sortir gare aux perfs

  3. #3
    Membre Expert Avatar de Garuda
    Homme Profil pro
    Chef de projet / Urbaniste SI
    Inscrit en
    Juin 2007
    Messages
    1 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet / Urbaniste SI
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 285
    Par défaut Requête pas si complexe que ca !
    Peut-être qu'un simple DECODE suffit ??
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    SELECT a.num_comd, a.DATE, b.des_vehicl, b.num_vehicl, c.nom_cli, j.regime,
           j.des_regm,
           regim.des_regm,
           DECODE (regim.des_regm,
                   'ttc', b.prix_ttc,
                   'invest', b.prix_invest,
                   'anciencombattant', b.prix_anciencombattant,
                   0
                  ) "prix"
      FROM commande a, vehicule b, client c, regim j
     WHERE command.regim = regim.code_regm
    NOTE : Y aurait-y pas des produits cartésiens (aucune jointure avec vehicule et client ?)

  4. #4
    Membre confirmé Avatar de scofield
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2006
    Messages
    179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2006
    Messages : 179
    Par défaut oh lala
    bonJOUR
    , j'ai posté une réponse il ya de cela 3 jour ! et surprise ya rien (si le serveur decone , qu'on nous le disent) .monsieur le modérateur c'est Bizarre
    cela dit désolé pour ce retard qui ne dépendait pas de moi !
    bref ,a titre d'éclaircissement voila mes table
    CLIENT avec 3type de lient particulier , morale, et ancein maquisard
    CREATE TABLE Client (num_cli VARCHAR2(9) NOT
    NULL, num_serv VARCHAR2(20) NOT NULL, nom_cli
    VARCHAR2(25) NOT NULL, pren_cli VARCHAR2(20),
    adr_cli VARCHAR2(50 ), type_cli VARCHAR2(20 ) NOT
    NULL,tel NUMBER , num_lic_M NUMBER,
    num_CF VARCHAR2(20), num_art NUMBER, num_cart_g
    VARCHAR2(20 ), num_RC VARCHAR2(20),num_cn NUMBER DEFAULT 0,
    CONSTRAINT pk_cl PRIMARY KEY(num_cli)
    VEHICULE
    CREATE TABLE Vehicule (ref_veh VARCHAR2(20) NOT
    NULL, num_kit NUMBER NOT NULL, marq_veh VARCHAR2(20),
    des_vehVARCHAR2(20), genre VARCHAR2(20 ),
    nbr_place NUMBER, poid_charg VARCHAR2(20), poid_vd
    NUMBER, prix_HT NUMBER, prix_TTC NUMBER, prix_Ansej
    NUMBER, prix_HT_HDD NUMBER,carbu VARCHAR2(25),caros VARCHAR2(25),
    CONSTRAINT FK_KIT FOREIGN KEY(num_kit)
    REFERENCES kit(num_kit) ON DELETE CASCADE,
    CONSTRAINT PK_VEH PRIMARY KEY(ref_veh)
    COMMANDE
    CREATE TABLE comd_veh (num_comv VARCHAR2(20 )
    NOT NULL, ref_vehVARCHAR2(10) NOT NULL,
    dat_comv DATE, num_cli VARCHAR2(9)
    NOT NULL, COUL VARCHAR2(35 BYTE),regim varchar2(20),
    CONSTRAINT FK_vcl FOREIGN KEY(ref_veh)
    REFERENCES Vehicule(ref_veh),
    CONSTRAINT FK_cli FOREIGN KEY(num_cli)
    REFERENCES client(num_cli),
    CONSTRAINT FK_regi FOREIGN KEY(regim)
    REFERENCES regim(code_regim),
    CONSTRAINT pk_comv PRIMARY KEY(num_comv)
    REGIME
    CREATE TABLE REGIM
    (code_regm VARCHAR2(1 ),
    des_regm VARCHAR2(20 ),CONSTRAINT pk_regi PRIMARY KEY(code_regim)
    FRED :
    1-j'ai pas tres bien compris le role exacte du UNION ALL .Est-ce-que ca ramène une seul vue (dynamique) ou 3 vue distinctes .
    2-et si comme tu dit c'est une erreur de conception les 3( )prix dans la même table véhicule , alors même en ce qui concerne les info des 3 type de client ,qui sont tous dans table client.
    "QUel serait ton conseil pour concilier le modél et la programmation".

    GARUDA:

    pour ta question ta raison juste un peut flemar ce jour la !les tables si dessus explique bien ce que j'ai omis de citer.

    I TRY CODES & COMBACK

  5. #5
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    Citation Envoyé par scofield Voir le message
    1-j'ai pas tres bien compris le role exacte du UNION ALL .Est-ce-que ca ramène une seul vue (dynamique) ou 3 vue distinctes .
    Une seule vue, c'est l'union des 3 résultats

    Citation Envoyé par scofield Voir le message
    2-et si comme tu dit c'est une erreur de conception les 3( )prix dans la même table véhicule , alors même en ce qui concerne les info des 3 type de client ,qui sont tous dans table client.
    "QUel serait ton conseil pour concilier le modél et la programmation".
    j'ai déjà répondu :

    Plutôt qu'une table véhicule avec (véhicule, prix1,prix2,prix3) j'aurais vu (véhicule, prix, type).

  6. #6
    Membre confirmé Avatar de scofield
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2006
    Messages
    179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2006
    Messages : 179
    Par défaut he!
    salut ,a tous
    finalement les deux proposition on marché impeccablement , mais j'ai choisit l'option decode(tu m'enveut pas fred ).juste voulu savoir,si le trigger d'insertion devrait pas poser de probleme sur ces vues
    voila donc , après une petite adaptation , le résultat.
    SELECT a.NUM_COMV,a.DAT_COMV,v.DES_VEH,v.REF_VEH,c.NOM_CLI||' '||c.PREN_CLI nom,v.MARQ_VEH marque,v.genre,ROUND(v.PRIX_TTC/1.17)PRIX_HT

    ,j.DES_REGM regim,
    DECODE (j.des_regm,'MAQ', v.prix_ht_hdd
    'TTC', v.prix_ttc),
    'INVEST', v.prix_ansej,0

    )"prix"
    FROM COMD_VEH a, vehicule v, client c, regim j
    WHERE a.REGIM =j.CODE_REGM and v.REF_VEH=a.REF_VEH and c.NUM_CLI=a.NUM_CLI
    Seulement voila !dans une commande faut qu'on sache la somme versé et ce qui reste .Alors, pour ça j'ai une table règlement (ou sont stocké les versements)
    REGLEMENT
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    reglement (num_regl NUMBER NOT NULL, 
        num_comv VARCHAR2(10) NOT NULL,date_regl DATE,mont_regl number,
        mod_regl varchar2(20),
        CONSTRAINT FK_rgcomd FOREIGN KEY(num_comv) 
        REFERENCES comd_veh(num_comv) ,     
        CONSTRAINT pk_reg PRIMARY KEY(num_regl,num_comv)
    LE PROBLEME ? j'y vient :
    1-dans cette vue,je doit générer deux colonne (verssé, reste)
    a partir des colonne de la table règlement.
    voici le code (des colonne)qui ne marche pas bien sur
    (select SUM (mont_regl)from reglement where num_comv=a.num_comv ) verssé , prix - versé reste
    ...+from..,règlement r
    ... +where a.num_comv=r.num
    HELP!
    ps: pour ta réponse fred la table (vehicule,type, prix) sa clé primaire est composé de veh et type non? si c le cas comment pourrait on mettre sa sur les client (l'éclatement avec leur attributs respectifs chacune)

Discussions similaires

  1. [MySQL] Instructions tres complexe à réaliser
    Par roukgreg dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 25/02/2011, 12h21
  2. auto jointure tres complexe
    Par twixster dans le forum Requêtes
    Réponses: 6
    Dernier message: 13/05/2009, 16h20
  3. tri tres complexe
    Par pinguy_k dans le forum Requêtes
    Réponses: 1
    Dernier message: 18/05/2008, 10h38
  4. analyse tres complexe de fichier
    Par makohsarah dans le forum Langage
    Réponses: 6
    Dernier message: 17/08/2006, 10h40
  5. question (peut-être idiote) sur les vues
    Par LadyArwen dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 26/03/2003, 10h35

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