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

Langage SQL Discussion :

double select ?


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 77
    Points : 68
    Points
    68
    Par défaut double select ?
    Bonjour,

    Je bute atrocement (voyez l'heure) sur une requête sql que je veux faire en une seule passe.
    NOTE :Le %orasql est une macro permettant d'utiliser en sas la syntaxe sql oracle.



    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
    %let DateD=08/04/2009; 
    %let Numtie=1979800;   
    %let ADCDEB=352;       
     
    %orasql(
           create table refus as
           select a.IDFDOS,
                   a.DATETD,
                   a.DATDEC,
                   a.IDFINTAGTPTN,
                   a.CODAGNPTN,
                   a.NUMDOSPTN,
                   b.SMNCLD  as SMNCLDETD 
           FROM  tf_dcfrfu_j a,
                    td_tps b
           where NUMPERADC >= &ADCDEB and
                 TYPETD='O' and
                 CODPRO=CODSERPRO and
                 trunc(DATETD) >= TO_DATE('&DateD','DD/MM/YYYY') and
                 NUMTIE in (select NUMTIE002 from td_tieptn_j
                       where NUMTIE002=&Numtie)
                 and trunc(a.datetd)=trunc(b.jou)
                    );


    Mon soucis : les colonnes "DATDEC" et "DATETD" sont des dates.
    La table DWH.TD_TPS est une table d'équivalence temps permettant la liaison entre une date "JOU" et des équivalence temporelles (ici ce sera la variable "SMNCLD" (semaine civile calendaire) )
    En gros, dans cette même étape, je voudrais pouvoir créer 2 colonnes supplémentaires ("SMNCLDDEC" et "SMNCLDETD") représentant respectivement l'équivalence des variables "DATETD" ET "DATDEC" par rapport à la table TD_TPS

    Dans mon exemple, cela fonctionne si je n'ai qu'une seule date(cad juste DATETD et pas en plus "DATDEC").
    En ce cas "SMNCLDETD" me donne bien l'équivalence de "DATETD" par rapport à la table TD_TPS.

    Mais comment réussir à faire la même chose, en une même étape pour la seconde date. Sachant que bien sur, les variables "DATDEC" et "DATETD" sont différentes.

    Le faire en une et même étape est une contrainte. Sinon en 2 ou 3 étapes je pourrais le faire (par exemple en utilisant du SAS en étape data-set)

    Avez-vous des idées ?

    Merci d'avance.

    Cdt,

  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
    C'est difficilement lisible, mais je pense que pour votre problème il suffit de rajouter une fois encore la table DWH.TD_TPS, vous l'aliasez en c, vous faites la jointure avec l'autre variable et vous rajoutez votre colonne dans le select initial.

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Bonjour,

    Merci beaucoup pour votre réponse Waldar !
    Tout d'abord je suis (sous un autre pseudo), l'initiateur du mail initial. Etant en congés ce jour, je poste de chez moi^^.

    Excusez-moi également pour la syntaxe SQL ou la simplicité de mes questions, mais j'ai débuté le SQL il ya 15 jours (je faisais du sas auparavant) donc je suis un peu perdu.

    Si j'ai bien compris votre réponse, vous me proposez de faire ceci :

    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
     
    %let DateD=08/04/2009; 
    %let Numtie=1979800;   
    %let ADCDEB=352;       
     
    %orasql(
           CREATE TABLE refus AS
           SELECT  a.IDFDOS,
                   a.DATETD,
                   a.DATDEC,
                   a.IDFINTAGTPTN,
                   a.CODAGNPTN,
                   a.NUMDOSPTN,
                   b.SMNCLD  AS SMNCLDETD,
                   c.SMNCLD  AS SMNCLDDEC 
           FROM  tf_dcfrfu_j a,
                 td_tps b,
                 td_tps c
           WHERE NUMPERADC >= &ADCDEB AND
                 TYPETD='O' AND
                 CODPRO=CODSERPRO AND
                 trunc(DATETD) >= TO_DATE('&DateD','DD/MM/YYYY') AND
                 NUMTIE IN (SELECT NUMTIE002 FROM td_tieptn_j
                       WHERE NUMTIE002=&Numtie)
                 AND trunc(a.datetd)=trunc(b.jou)
                 AND trunc(a.datdec)=trunc(c.jou)
                    );
    Pour mieux expliciter mon propos, voici ce que sont les données (très simplifiées):

    Est ce que je suis sur le bonne voie ?

    Merci d'avance.

    Cdt,
    Fichiers attachés Fichiers attachés

  4. #4
    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
    Oui c'est bien l'idée derrière mon propos.
    Tenez-nous au courant quand vous essayerez.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 77
    Points : 68
    Points
    68
    Par défaut
    Bonjour,

    J'ai exécuté la requête mais ceci ramène une erreur :

    ERROR: ORACLE prepare error: ORA-00918: column ambiguously defined.

    Cette erreur se produit bien si je rajoute encore une fois la variable SMNCLD (cf mon second post).

    Apparemment, selectionner 2 fois la même variable d'une même table, même en faisant des alias de ces tables, pose soucis.

    Merci de votre aide.

    Cdt,

  6. #6
    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
    Il faut aliaser toutes les colonnes du select, du from, du where et cetera.

    C'est une bonne pratique à mettre en place dès que dans une requête il y a
    plus d'une table, ça évite des confusions et ça facilite la relecture.

    N'hésitez pas à poster la nouvelle requête qui pose problème.

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 77
    Points : 68
    Points
    68
    Par défaut
    Bonjour,

    Désolé pour ce temps derrière votre dernière réponse

    En effet, en aliasant chaque variables, cela passe nickel !!
    Je retiens la leçon : même quand on pense qu'il n'y a pas de confusion possible, le faire quand même.

    Merci beaucoup !!!

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

Discussions similaires

  1. double select rempli dans l'Action
    Par kiwwi209 dans le forum Struts 2
    Réponses: 4
    Dernier message: 20/05/2010, 11h11
  2. faire un double select
    Par rastacouaire dans le forum Débuter
    Réponses: 14
    Dernier message: 09/02/2009, 17h47
  3. [AJAX] Erreur de raisonnement : double select plus graph en AJAX
    Par MortyDeath dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 21/11/2007, 16h23
  4. Un double Select doublé d un "for each" qui coince
    Par Sparal dans le forum Access
    Réponses: 4
    Dernier message: 09/02/2006, 15h00
  5. double selection impossible
    Par Ghost Dog dans le forum OpenGL
    Réponses: 3
    Dernier message: 12/05/2005, 20h42

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