Précédent   Forum des professionnels en informatique > Logiciels > Solutions d'entreprise > Business Intelligence > SAS > SAS Base
SAS Base Forum d'entraide sur SAS base : étape data, procédures non statistiques, procédures non graphiques, SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 31/01/2012, 14h31   #1
Invité de passage
 
Homme
Conseil - Consultant en systèmes d'information
Inscription : mars 2011
Messages : 23
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Conseil - Consultant en systèmes d'information
Secteur : Conseil

Informations forums :
Inscription : mars 2011
Messages : 23
Points : 3
Points : 3
Par défaut proc sql clause OR

Bonjour à tous,

Voici mon problème.
Je dois refondre une requête Oracle en SAS via une proc SQL.
Cette requête comporte plusieurs requêtes imbriquées de ce type :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
proc sql;
SELECT ALL D.TU_CTI3 , c.TU_CODE ,  D.TU_APPART
FROM STATPROD.TABLEU D, SASUSER.tmp_TABLEU_VIEW C WHERE 
(
(
	(TU_APPART IN (SELECT ALL C.TU_CODE FROM SASUSER.tmp_TABLEU_VIEW WHERE SUBSTR(C.TU_LIB,1,11) = 'Delegations') )
	 OR
	(C.TU_CODE IN (SELECT ALL C.TU_CODE FROM SASUSER.tmp_TABLEU_VIEW WHERE SUBSTR(C.TU_LIB,1,11) = 'Delegations') )  
 
)
	) AND (C.TU_CODE = D.TU_CODE) GROUP BY D.TU_CTI3 ;
quit;
Quand je l'exécute, le résultat est vide alors que le résultats de la seconde instruction OR (testée séparément ) comporte une centaine d'enregistrements.

Code :
1
2
3
4
5
6
7
8
9
proc sql ;
CREATE TABLE work.req_0_2 AS
SELECT D.TU_CTI3 , D.TU_APPART 
FROM STATPROD.TABLEU AS D, SASUSER.tmp_TABLEU_VIEW AS C
WHERE D.TU_APPART IN 
		(SELECT ALL C.TU_CODE 
		FROM SASUSER.tmp_TABLEU_VIEW AS C 
		WHERE SUBSTR(C.TU_LIB,1,11) = 'Delegations') AND (C.TU_CODE = D.TU_CODE) GROUP BY D.TU_CTI3;
quit;
J'ai contourné ce problème en remplaçant le OR par un UNION.
Mais réécrire l'intégralité de cette requête en remplaceant toutes les clauses de ce type par des unions prendrait du temps, ne serait pas propre et poserait de gros problèmes de performance.

Sauriez-vous d'où vient ce problème ? Y'a t il un moyen plus optimisé de contourner ce problème ?

En vous remerciant
walooze est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2012, 15h28   #2
Membre Expert
 
Inscription : mars 2005
Messages : 1 012
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 1 012
Points : 1 260
Points : 1 260
Envoyer un message via Yahoo à bahraoui
Est ce que tu peux tester la requête ci-dessous, j'ai juste enlevé l'alias C des sous requêtes, je ne sais pas si le compilateur comprendra correctement dans ce cas?

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
proc sql;
SELECT ALL D.TU_CTI3 , c.TU_CODE ,  D.TU_APPART
FROM STATPROD.TABLEU D, SASUSER.tmp_TABLEU_VIEW C WHERE 
(
(
	(TU_APPART IN (SELECT ALL TU_CODE FROM SASUSER.tmp_TABLEU_VIEW WHERE SUBSTR(TU_LIB,1,11) = 'Delegations') )
	 OR
	(C.TU_CODE IN (SELECT ALL TU_CODE FROM SASUSER.tmp_TABLEU_VIEW WHERE SUBSTR(TU_LIB,1,11) = 'Delegations') )  
 
)
	) AND (C.TU_CODE = D.TU_CODE) GROUP BY D.TU_CTI3 ;
quit;
__________________
Consultez les FAQs et les anciens postes avant de poser vos questions. Merci
bahraoui est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2012, 15h40   #3
Invité de passage
 
Homme
Conseil - Consultant en systèmes d'information
Inscription : mars 2011
Messages : 23
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Conseil - Consultant en systèmes d'information
Secteur : Conseil

Informations forums :
Inscription : mars 2011
Messages : 23
Points : 3
Points : 3
Bien vu ! Cela semble fonctionner pour cette sous requête.

Apparemment oracle et SAS ne gèrent pas les alias de tables de la même façon.

Merci bcp.
walooze est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2012, 15h49   #4
Membre Expert
 
Inscription : mars 2005
Messages : 1 012
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 1 012
Points : 1 260
Points : 1 260
Envoyer un message via Yahoo à bahraoui
cool
__________________
Consultez les FAQs et les anciens postes avant de poser vos questions. Merci
bahraoui est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 11h17.


 
 
 
 
Partenaires

Hébergement Web