bonjour,
pour faire une select sur deux tables, faut-il obligatoirement faire une merge avant ? ou peut-on tenter une select sans risque ?
merci...![]()
bonjour,
pour faire une select sur deux tables, faut-il obligatoirement faire une merge avant ? ou peut-on tenter une select sans risque ?
merci...![]()
Bonjour
Votre demande n'est pas très claire.
Pour faire un SELECT sur deux tables, il faut utiliser la syntaxe SELECT ... JOIN....
Poster le DDL de vos tables et expliquer ce que vous voulez faire et on pourra sans doute fournir une réponse plus précise.
Bonjour,
Pour obtenir des données provenant de deux tables, il suffit de faire un SELECT avec une jointure...
Que voulez vous faire comme merge ?
bonjour,
pour les données, il s'agit de comparer deux codes (type caractères donc) pour voir s'il y a des codes qui sont dans un fichier et non dans l'autre.
En fait, il me faut les codes qui ne sont ni dans l'un ni dans l'autre des fichiers.
faut-il une merge ? : non à priori car seront sélectionnées les codes apparaissant dans l'un et dans l'autre
une concaténation ? : non, il ne s'agit pas d'une simple juxtaposition d'éléments, il faut que les éléments semblables soient mis sur une même ligne,
...Une Select sera-t-elle pertinente ? Car il ne faut pas supprimer les éléments qui ne sont pas présents
D'où viennent les codes alors, s'ils ne sont ni dans l'un ni dans l'autre ?
On va supposer que vous vouliez parler de table et non de fichier, et que vous cherchez les codes qui ne sont pas dans les deux tables à la fois :
Soient deux tables T1 et T2, on cherche les codes qui sont dans T1 mais pas dans T2, ou dans T2 mais pas dans T1 , on peut faire ainsi :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 SELECT COALESCE(T1.code, T2.code) FROM T1 FULL OUTER JOIN T2 ON T1.code = T2.code WHERE T1 IS NULL OR T2 IS NULL
Pour information, c'est sous SAS et voici mon code :
Plusieurs problèmes :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 /*TRI des données */ proc sort data=tab1; by id; run; proc sort data=tab2; by num; run; data similarites; merge tab1(in=a) tab2(in=b); by id; if a and not(b); order by id; run;
1) le tri ne s'effectue sur aucun des deux fichiers.
2) c'est une merge que je fais. Est-ce possible ? En fin de compte, il s'agit de faire l'union/intersection des deux tables...
3) faut-il que les colonnes des codes aient le même nom ? Id dans la première table et num dans la 2nde table, mais c'est le même code. Si non, comment fait-on pour l'instruction BY dans ce cas ? Un identifiant temporaire est-il créé ?
4) Order by id ne marche pas, mais il y a-t-il un intérêt à le mettre ?
![]()
Pourça ne marche pas, car les codes se cumulent sur une colonne or, je veux pouvoir voir le différentiel entre les codes, donc :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 SELECT COALESCE(T1.code, T2.code) FROM T1 FULL OUTER JOIN T2 ON T1.code = T2.code WHERE T1 IS NULL OR T2 IS NULL
avoir :
colonne1 : code de la table 1
colonne2 : code de la table 2
--> cela permettra de voir les différences
donc, c'est un merge ?
en tout cas, j'ai créé une nouvelle table avec le code de la table 1, et je fais une merge pour y accoler le code de la table 2.
Une select eut pu être plus efficace en terme de temps, mais ?? Je n'y arrive pas!!! Peut-être est-ce tout simple...![]()
Sur ma merge, le log indique :(code et id sont la même chose)WARNING: Multiple lengths were specified for the BY variable id by input data sets.
This may cause unexpected results.
ERROR: BY variables are not properly sorted on data set .
????? Pourquoi ????
Length de id de la table 1 est identique à celui de l'id de la table 2 (4 caractères). Concrètement, il y a des codes à 4 caractères (1111 par exemple) uniquement dans la table 2 mais c'est normal, il s''agit de repérer les différences.
Est-ce du au fait que j'ai nommé les deux colonnes de codes par le même nom, ce qui fait que la colonne des deux tables n'en forme plus qu'une dans la nouvelle table ?
2 remarques :
résolu1) le tri ne s'effectue sur aucun des deux fichiers.
résolu, j'ai nommé de la même manière, mais ma question demeure, si quelqu'un a une pierre à apporter à l'édifice...3) faut-il que les colonnes des codes aient le même nom ? Id dans la première table et num dans la 2nde table, mais c'est le même code. Si non, comment fait-on pour l'instruction BY dans ce cas ? Un identifiant temporaire est-il créé ?
si vous avez des propositions à faire, car je me noie entre le merge et le select , merci...
@aieeeuuu : pourriez-vous svp expliquer en détail votre code ? merci....
Partager