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

Outils BI Discussion :

Création de colonne dans une Sous - Requête


Sujet :

Outils BI

  1. #1
    Membre du Club
    Homme Profil pro
    Ingénieur Statisticien
    Inscrit en
    Janvier 2013
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Statisticien
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2013
    Messages : 28
    Points : 59
    Points
    59
    Par défaut Création de colonne dans une Sous - Requête
    Bonjour,

    Sur Data Integration Studio 4.5, je souhaite réaliser une simple jointure gauche entre deux tables, mais avec un critère de jointure utilisant une variable générée.

    Je passe donc par une sous-requête, afin de générer ma variable et ensuite l'utiliser comme critère de jointure.

    Le problème c'est que, bien que l'éditeur graphique semble accepter ma création de variable (mention dans le navigateur de tables, mention dans l'éditeur de jointure au niveau du choix des 'Opérande'), le code généré fait purement et simplement l'impasse sur tout le toutim !

    C'est pourtant simple, la PROC SQL que je veux avoir serait du type suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    proc sql;
    	create table dimension as
    	select *
    	from 
    		(select *, strip(CASE WHEN substr(monid,1,2)="97" THEN substr(monid,1,4) ELSE substr(monid,1,2) END) as mavar 
    			from table2) t
    	left join table1 d on (d.mavar=t.mavar);
    quit;
    Mais l'éditeur de Data Integration Studio me génère le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    proc sql;
    	create table dimension as
    	select *
    	from 
    		(select * 
    			from table2) t
    	left join table1 d on (d.mavar=t.mavar);
    quit;
    Forcément, avec une telle requête il ne risque pas de faire la jointure entret et d le gros malin
    Alors que l'éditeur graphique indique bien une variable 'mavar' dans la sous-requête et dans le critère de jointure.

    quelqu'un a-t-il déjà observé un tel comportement ???

  2. #2
    Rédacteur

    Homme Profil pro
    SAS ALLIANCE SILVER. Consultant et formateur SAS et Cognos.
    Inscrit en
    Avril 2009
    Messages
    2 497
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : SAS ALLIANCE SILVER. Consultant et formateur SAS et Cognos.
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2009
    Messages : 2 497
    Points : 6 064
    Points
    6 064
    Par défaut
    non mais j'aurai tendance à faire en deux temps. fait une table correspondant à cette sous-requête et fait ton JOIN ensuite.

  3. #3
    Membre du Club
    Homme Profil pro
    Ingénieur Statisticien
    Inscrit en
    Janvier 2013
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Statisticien
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2013
    Messages : 28
    Points : 59
    Points
    59
    Par défaut
    Merci datametric.

    Ma question n'est pas de savoir comment faire en sorte que la requête fonctionne, mais de savoir pourquoi elle ne fonctionne pas.

    Est-ce que j'ai oublié une option quelque part ? Est-ce que DIS 4.5 fonctionne bien ?

    Si DIS me propose un éditeur de sous-requête, j'ai envie de l'utiliser.
    Celui-ci me permet de définir des variables générées, et l'éditeur graphique les propose même comme critère de jointure.

    Alors comment se fait-il qu'il y ait une telle discordance entre ce que me dit l'éditeur graphique (le WYSIWYG SQL) et le code généré ?

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    747
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 747
    Points : 978
    Points
    978
    Par défaut
    Parce que tu es autorisé a faire une sous-requete dans un clause WHERE mais pas dans un FROM?

    ici pas besoin de sous-requete :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    proc sql;
    	CREATE TABLE dimension AS
    	SELECT d.*, t.*, strip(CASE WHEN substr(monid,1,2)="97" THEN substr(monid,1,4) ELSE substr(monid,1,2) END) AS mavar
    	FROM table2 t
    	LEFT JOIN table1 d 
       ON (d.mavar = strip(ifc(substr(t.monid,1,2)="97", substr(t.monid,1,4), substr(t.monid,1,2))))
       ;
    quit;

Discussions similaires

  1. Création de colonnes dans une requête interrogative ?
    Par petithomme8 dans le forum Requêtes
    Réponses: 2
    Dernier message: 10/02/2011, 15h52
  2. Utilisation de colonnes dans une sous-requête
    Par boubacach dans le forum SQL
    Réponses: 5
    Dernier message: 31/05/2010, 10h55
  3. Passer un paramètre dans une sous-requête
    Par Lucier dans le forum Langage SQL
    Réponses: 1
    Dernier message: 09/10/2007, 10h07
  4. Contourner le non-support de limit dans une sous-requête
    Par Christophe Charron dans le forum Requêtes
    Réponses: 7
    Dernier message: 04/09/2007, 10h45
  5. Ramener plusieurs champs dans une sous requête...
    Par David.V dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 12/01/2005, 07h54

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