<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: Requête inner join conditional in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Requ%C3%AAte-inner-join-conditional/m-p/916642#M361026</link>
    <description>&lt;P&gt;Si j'ai bien compris le problème, il faudrait remplacer les jointures internes par des jointures externes.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;select
	pop.pop_id, pop.date, ... ,
	pop.geo_id, 
	coalesce(jur.var1, geo.var1) as var1,
	coalesce(jur.var2, geo.var2) as var2, ...
from
	pop 
		left join jur on pop.pop_id=jur.id and pop.date=jur.date and ...
		left join geo on pop.geo_id=geo.id and pop.date=geo.date and ...;
quit;&lt;/CODE&gt;&lt;/PRE&gt;</description>
    <pubDate>Sat, 17 Feb 2024 21:25:41 GMT</pubDate>
    <dc:creator>PGStats</dc:creator>
    <dc:date>2024-02-17T21:25:41Z</dc:date>
    <item>
      <title>Requête inner join conditional</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Requ%C3%AAte-inner-join-conditional/m-p/916620#M361015</link>
      <description>&lt;P&gt;Bonjour,&lt;BR /&gt;J'ai une table principale nommée &lt;EM&gt;population&lt;/EM&gt; que je souhaite joindre avec d'autres tables mentionnées, utilisant comme principaux critères de jointure l'identifiant juridique (identifiant_jur) en premier, ainsi que d'autres variables telles que mois_naissance, annee_naissance ou code_sexe. La majorité des identifiants de population correspondent aux tables via l'identifiant_jur. Cependant, environ la moitié des identifiants ne sont pas trouvés car ils correspondent en joignant par l'identifiant géographique (identifiant_geo).&lt;/P&gt;&lt;P&gt;C'est pourquoi j'avais initialement créé deux requêtes ou macros : la première effectuait la jointure par l'identifiant_jur et d'autres variables d'intérêt, et ensuite, pour la population sans correspondance, que je nommais sans_correspondances, la deuxième macro réalisait la jointure par l'identifiant_geo, trouvant ainsi presque la totalité des identifiants. Comment puis-je réaliser ces deux étapes en une seule requête ou macro, qui effectue d'abord la jointure par l'identifiant_jur et, en cas d'absence de correspondance, utilise la variable identifiant_geo pour tenter la jointure, en plus des variables mois_naissance, annee_naissance et code_sexe?&lt;/P&gt;&lt;P&gt;Ceci, &lt;U&gt;en prenant en compte l'ordre des tables&lt;/U&gt; et ces clés de jointures. Ce que je cherche, c'est une seule requête, avec une hiérarchie bien établie qui joigne d'abord par l'identifiant_jur et, s'il n'y a pas de correspondance, essaie ensuite la jointure avec l'identifiant_geo, la condition de hiérarchie n'étant pas l'absence de l'identifiant_jur car la table de population n'est jamais vide ni pour la variable identifiant_jur ni pour identifiant_geo. Ainsi, si la jointure a.identifiant_jur = c.CODE_ETABLISSEMENT ne trouve pas de correspondance, elle passe à l'autre table et tente a.identifiant_geo = u.CODE_GEO, sans oublier les autres conditions de correspondance and a.mois_naissance=b.MOIS_NAISSANCE, and a.annee_naissance=b.ANNEE_NAISSANCE, and a.code_sexe = b.CODE_SEXE, et les clés de jointure des tables.&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;Pourriez vous m'aider a joindre cette deux requetes en 1 seul requete avec une jointure conditionnelle? if&amp;nbsp;&lt;STRONG&gt;&amp;nbsp;(a.identifiant_jur = c.CODE_ETABLISSEMENT or&amp;nbsp; a.identifiant_geo = u.CODE_GEO) et apres les autres trois condicions de jointure&amp;nbsp;&amp;nbsp;a.mois_naissance=b.MOIS_NAISSANCE, and a.annee_naissance=b.ANNEE_NAISSANCE, and a.code_sexe = b.CODE_SEXE sans oublier que pour passer de la table&amp;nbsp;&amp;nbsp;DONNEES_SEJOUR a la table&amp;nbsp;LOCALISATION_GEO il y a deux cles de jointure&amp;nbsp;c.CODE_ETABLISSEMENT = u.CODE_ETABLISSEMENT&amp;nbsp;/*cle de jointure */&lt;BR /&gt;and c.NUM_SEJOUR = u.NUM_SEJOUR&amp;nbsp;/*cle de jointure */.&lt;BR /&gt;&lt;BR /&gt;Merci&amp;nbsp;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;%MACRO JOIN_DONNEES_A(annee);&lt;/P&gt;&lt;P&gt;%let an = %substr(&amp;amp;annee,3,2);&lt;/P&gt;&lt;P&gt;proc sql;&lt;BR /&gt;%connectora;&lt;BR /&gt;create table APP.join_donnees_a_&amp;amp;annee. as select * from&lt;BR /&gt;connection to Oracle (select distinct&lt;BR /&gt;a.*,&lt;BR /&gt;c.CODE_ETABLISSEMENT,&lt;BR /&gt;c.NUM_SEJOUR,&lt;BR /&gt;c.ID_PATIENT,&lt;BR /&gt;c.DATE_DEB_SOIN,&lt;BR /&gt;c.DATE_FIN_SOIN,&lt;BR /&gt;c.ANNEE_ENTREE,&lt;BR /&gt;c.DATE_ENTREE,&lt;BR /&gt;c.DATE_SORTIE,&lt;/P&gt;&lt;P&gt;e.DIAG_PRINCIPAL,&lt;BR /&gt;e.DIAG_SECONDAIRE,&lt;/P&gt;&lt;P&gt;b.ANNEE_NAISSANCE,&lt;BR /&gt;b.MOIS_NAISSANCE,&lt;BR /&gt;b.CODE_SEXE,&lt;BR /&gt;b.INDICATEUR_DECES,&lt;BR /&gt;b.DATE_DECES,&lt;/P&gt;&lt;P&gt;d.CODE_MEDICAMENT,&lt;/P&gt;&lt;P&gt;u.CODE_GEO&lt;/P&gt;&lt;P&gt;from population a&lt;/P&gt;&lt;P&gt;inner join DONNEES_SEJOUR c&lt;BR /&gt;on&lt;FONT face="arial black,avant garde"&gt;&lt;STRONG&gt; a.identifiant_jur = c.CODE_ETABLISSEMENT&amp;nbsp;&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;inner join DONNEES_PATIENT b&lt;BR /&gt;on c.ID_PATIENT = b.IDENTIFIANT_UNIQUE&amp;nbsp;/*cle de jointure */&lt;/P&gt;&lt;P&gt;and a.mois_naissance=b.MOIS_NAISSANCE&lt;BR /&gt;and a.annee_naissance=b.ANNEE_NAISSANCE&lt;BR /&gt;and a.code_sexe = b.CODE_SEXE&lt;/P&gt;&lt;P&gt;inner join DIAGNOSTICS e&lt;BR /&gt;on c.CODE_ETABLISSEMENT = e.CODE_ETABLISSEMENT&amp;nbsp;/*cle de jointure */&lt;BR /&gt;and c.NUM_SEJOUR = e.NUM_SEJOUR&amp;nbsp;/*cle de jointure */&lt;/P&gt;&lt;P&gt;inner join LOCALISATION_GEO u&lt;BR /&gt;on c.CODE_ETABLISSEMENT = u.CODE_ETABLISSEMENT&amp;nbsp;/*cle de jointure */&lt;BR /&gt;and c.NUM_SEJOUR = u.NUM_SEJOUR&amp;nbsp;/*cle de jointure */&lt;/P&gt;&lt;P&gt;inner join MEDICAMENTS_PATIENT d&lt;BR /&gt;on c.ID_PATIENT = d.IDENTIFIANT_UNIQUE&amp;nbsp;/*cle de jointure */&lt;/P&gt;&lt;P&gt;);&lt;BR /&gt;disconnect from oracle;&lt;BR /&gt;quit; run;&lt;/P&gt;&lt;P&gt;%mend;&lt;/P&gt;&lt;P&gt;%JOIN_DONNEES_A(2019);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Macro&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;%MACRO JOIN_DONNEES_B(annee);&lt;/P&gt;&lt;P&gt;%let an = %substr(&amp;amp;annee,3,2);&lt;/P&gt;&lt;P&gt;proc sql;&lt;BR /&gt;%connectora;&lt;BR /&gt;create table APP.join_donnees_a_&amp;amp;annee. as select * from&lt;BR /&gt;connection to Oracle (select distinct&lt;BR /&gt;a.*,&lt;BR /&gt;c.CODE_ETABLISSEMENT,&lt;BR /&gt;c.NUM_SEJOUR,&lt;BR /&gt;c.ID_PATIENT,&lt;BR /&gt;c.DATE_DEB_SOIN,&lt;BR /&gt;c.DATE_FIN_SOIN,&lt;BR /&gt;c.ANNEE_ENTREE,&lt;BR /&gt;c.DATE_ENTREE,&lt;BR /&gt;c.DATE_SORTIE,&lt;/P&gt;&lt;P&gt;/* Diagnostics et Médicaments commentés */&lt;BR /&gt;b.ANNEE_NAISSANCE,&lt;BR /&gt;b.MOIS_NAISSANCE,&lt;BR /&gt;b.CODE_SEXE,&lt;BR /&gt;b.INDICATEUR_DECES,&lt;BR /&gt;b.DATE_DECES,&lt;/P&gt;&lt;P&gt;u.CODE_GEO&lt;/P&gt;&lt;P&gt;from DONNEES_SEJOUR c&lt;/P&gt;&lt;P&gt;inner join LOCALISATION_GEO u&lt;BR /&gt;on c.CODE_ETABLISSEMENT = u.CODE_ETABLISSEMENT /*cle de jointure */&lt;BR /&gt;and c.NUM_SEJOUR = u.NUM_SEJOUR&amp;nbsp; /*cle de jointure */&lt;/P&gt;&lt;P&gt;inner join sans_correspondances a&lt;BR /&gt;on &lt;FONT face="arial black,avant garde"&gt;&lt;EM&gt;&lt;STRONG&gt;a.identifiant_geo = u.CODE_GEO&lt;/STRONG&gt;&lt;/EM&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;inner join DONNEES_PATIENT b&lt;BR /&gt;on c.ID_PATIENT = b.IDENTIFIANT_UNIQUE&amp;nbsp;/*cle de jointure */&lt;/P&gt;&lt;P&gt;and a.mois_naissance=b.MOIS_NAISSANCE&lt;BR /&gt;and a.annee_naissance=b.ANNEE_NAISSANCE&lt;BR /&gt;and a.code_sexe = b.CODE_SEXE&lt;/P&gt;&lt;P&gt;/* Sections Diagnostics et Médicaments commentées */&lt;/P&gt;&lt;P&gt;);&lt;BR /&gt;disconnect from oracle;&lt;BR /&gt;quit; run;&lt;/P&gt;&lt;P&gt;%mend;&lt;/P&gt;&lt;P&gt;%JOIN_DONNEES_B(2019);&lt;/P&gt;</description>
      <pubDate>Sat, 17 Feb 2024 10:57:10 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Requ%C3%AAte-inner-join-conditional/m-p/916620#M361015</guid>
      <dc:creator>agdato</dc:creator>
      <dc:date>2024-02-17T10:57:10Z</dc:date>
    </item>
    <item>
      <title>Re: Requête inner join conditional</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Requ%C3%AAte-inner-join-conditional/m-p/916642#M361026</link>
      <description>&lt;P&gt;Si j'ai bien compris le problème, il faudrait remplacer les jointures internes par des jointures externes.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;select
	pop.pop_id, pop.date, ... ,
	pop.geo_id, 
	coalesce(jur.var1, geo.var1) as var1,
	coalesce(jur.var2, geo.var2) as var2, ...
from
	pop 
		left join jur on pop.pop_id=jur.id and pop.date=jur.date and ...
		left join geo on pop.geo_id=geo.id and pop.date=geo.date and ...;
quit;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Sat, 17 Feb 2024 21:25:41 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Requ%C3%AAte-inner-join-conditional/m-p/916642#M361026</guid>
      <dc:creator>PGStats</dc:creator>
      <dc:date>2024-02-17T21:25:41Z</dc:date>
    </item>
  </channel>
</rss>

