<?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 SQL join question in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/SQL-join-question/m-p/50843#M10645</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I think that the following will provide what you want:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc sql;&lt;/P&gt;&lt;P&gt;&amp;nbsp; create table report as&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; select a.customer_id, &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; max(count(distinct b.visit_date),0) as visit_cnt&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; from customer a&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; left join (select visit_date from visit b&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; where b.visit_date between '01apr2011'd and '30apr2011'd)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; on a.customer_id = b.customer_id&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; group by a.customer_id&lt;/P&gt;&lt;P&gt;;&lt;/P&gt;&lt;P&gt;quit;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Thu, 18 Aug 2011 17:33:30 GMT</pubDate>
    <dc:creator>art297</dc:creator>
    <dc:date>2011-08-18T17:33:30Z</dc:date>
    <item>
      <title>SQL join question</title>
      <link>https://communities.sas.com/t5/SAS-Programming/SQL-join-question/m-p/50842#M10644</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Suppose I have two datasets like below:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;CUSTOMER dataset:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;customer_id, last_name&lt;/P&gt;&lt;P&gt;001, Natha&lt;/P&gt;&lt;P&gt;002, Cooper&lt;/P&gt;&lt;P&gt;003, David&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;VISIT dataset:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;customer_id, visit_date&lt;/P&gt;&lt;P&gt;001, 01-MAR-2011&lt;/P&gt;&lt;P&gt;001, 03-APR-2011&lt;/P&gt;&lt;P&gt;001, 15-MAY-2011&lt;/P&gt;&lt;P&gt;002, 21-FEB-2011&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I want to use one PROC SQL to produce the visit date count for each customer during APR-2011. Here is my query:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc sql;&lt;/P&gt;&lt;P&gt;&amp;nbsp; create table report as&lt;/P&gt;&lt;P&gt;&amp;nbsp; select a.customer_id, count(distinct b.visit_date) as visit_cnt&lt;/P&gt;&lt;P&gt;&amp;nbsp; from customer a left join visit b on a.customer_id = b.customer_id&lt;/P&gt;&lt;P&gt;&amp;nbsp; where b.visit_date between '01apr2011'd and '30apr2011'd&lt;/P&gt;&lt;P&gt;&amp;nbsp; group by a.customer_id&lt;/P&gt;&lt;P&gt;; quit;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;This produces:&lt;/P&gt;&lt;P&gt;001, 1&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;But the output I want is:&lt;/P&gt;&lt;P&gt;001, 1&lt;/P&gt;&lt;P&gt;002, 0&lt;/P&gt;&lt;P&gt;003, 0&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Any suggestion for using one PROC SQL to produce the desired result?&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 18 Aug 2011 17:08:34 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/SQL-join-question/m-p/50842#M10644</guid>
      <dc:creator>MarcTC</dc:creator>
      <dc:date>2011-08-18T17:08:34Z</dc:date>
    </item>
    <item>
      <title>SQL join question</title>
      <link>https://communities.sas.com/t5/SAS-Programming/SQL-join-question/m-p/50843#M10645</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I think that the following will provide what you want:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc sql;&lt;/P&gt;&lt;P&gt;&amp;nbsp; create table report as&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; select a.customer_id, &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; max(count(distinct b.visit_date),0) as visit_cnt&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; from customer a&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; left join (select visit_date from visit b&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; where b.visit_date between '01apr2011'd and '30apr2011'd)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; on a.customer_id = b.customer_id&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; group by a.customer_id&lt;/P&gt;&lt;P&gt;;&lt;/P&gt;&lt;P&gt;quit;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 18 Aug 2011 17:33:30 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/SQL-join-question/m-p/50843#M10645</guid>
      <dc:creator>art297</dc:creator>
      <dc:date>2011-08-18T17:33:30Z</dc:date>
    </item>
    <item>
      <title>SQL join question</title>
      <link>https://communities.sas.com/t5/SAS-Programming/SQL-join-question/m-p/50844#M10646</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;This should do it for you:&lt;/P&gt;&lt;PRE&gt;proc sql;
&amp;nbsp;&amp;nbsp; create table report as
&amp;nbsp;&amp;nbsp; select c.customer_id
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; , coalesce(Count,0) as visit_cnt
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; from customer c
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; left join 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (SELECT customer_id, count(*) as Count
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; from visit 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; where visit_date between '01apr2011'd and '30apr2011'd
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; group by 1) v
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; on c.customer_id=v.customer_id
; 
quit;
&lt;/PRE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 19 Aug 2011 01:55:21 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/SQL-join-question/m-p/50844#M10646</guid>
      <dc:creator>SASJedi</dc:creator>
      <dc:date>2011-08-19T01:55:21Z</dc:date>
    </item>
    <item>
      <title>Re: SQL join question</title>
      <link>https://communities.sas.com/t5/SAS-Programming/SQL-join-question/m-p/50845#M10647</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Haha.&lt;/P&gt;&lt;P&gt;It has been mentioned by Howles.You should use 'and' instead of 'where' statement which will filter the obs.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc sql;&lt;/P&gt;&lt;P&gt;&amp;nbsp; create table report as&lt;/P&gt;&lt;P&gt;&amp;nbsp; select a.customer_id, count(distinct b.visit_date) as visit_cnt&lt;/P&gt;&lt;P&gt;&amp;nbsp; from customer a left join visit b on a.customer_id = b.customer_id&lt;/P&gt;&lt;P&gt;&amp;nbsp; &lt;STRONG&gt;and &lt;/STRONG&gt;b.visit_date between '01apr2011'd and '30apr2011'd&lt;/P&gt;&lt;P&gt;&amp;nbsp; group by a.customer_id&lt;/P&gt;&lt;P&gt;; quit;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE&gt;data customer;
input customer_id $ last_name $;
cards;
001 Natha
002 Cooper
003 David
;
run;
data VISIT&amp;nbsp; ;
input customer_id $ visit_date date12.;
format visit_date date9.;
cards;
001 01-MAR-2011
001 03-APR-2011
001 15-MAY-2011
002 21-FEB-2011
;
run; 

proc sql;
&amp;nbsp; create table report as
&amp;nbsp; select a.customer_id, count(distinct b.visit_date) as visit_cnt
&amp;nbsp; from customer a left join visit b on a.customer_id = b.customer_id
&amp;nbsp; and b.visit_date between '01apr2011'd and '30apr2011'd
&amp;nbsp; group by a.customer_id
; quit;
&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Ksharp&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 19 Aug 2011 08:42:22 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/SQL-join-question/m-p/50845#M10647</guid>
      <dc:creator>Ksharp</dc:creator>
      <dc:date>2011-08-19T08:42:22Z</dc:date>
    </item>
    <item>
      <title>Re: SQL join question</title>
      <link>https://communities.sas.com/t5/SAS-Programming/SQL-join-question/m-p/50846#M10648</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Ksharp,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks for pointing out this trick.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Actually should we say 'and' enables filtering on visit dataset while 'where' filers on the join results?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Would this query executed in ANSI SQL behave the same?&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 19 Aug 2011 13:31:07 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/SQL-join-question/m-p/50846#M10648</guid>
      <dc:creator>MarcTC</dc:creator>
      <dc:date>2011-08-19T13:31:07Z</dc:date>
    </item>
    <item>
      <title>Re: SQL join question</title>
      <link>https://communities.sas.com/t5/SAS-Programming/SQL-join-question/m-p/50847#M10649</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Ksharp, Could you tell me which section of Howes' sqlbook tak about this trick?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;A href="http://www.howles.com/sqlbook/"&gt;http://www.howles.com/sqlbook/&lt;/A&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 19 Aug 2011 14:13:51 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/SQL-join-question/m-p/50847#M10649</guid>
      <dc:creator>MarcTC</dc:creator>
      <dc:date>2011-08-19T14:13:51Z</dc:date>
    </item>
    <item>
      <title>Re: SQL join question</title>
      <link>https://communities.sas.com/t5/SAS-Programming/SQL-join-question/m-p/50848#M10650</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Marc,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;Howard mentions it in one of his posts to the forum.&amp;nbsp; Take a look at: &lt;/SPAN&gt;&lt;A class="jive-link-external-small" href="http://communities.sas.com/message/57333#57333"&gt;http://communities.sas.com/message/57333#57333&lt;/A&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 21 Aug 2011 15:10:08 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/SQL-join-question/m-p/50848#M10650</guid>
      <dc:creator>art297</dc:creator>
      <dc:date>2011-08-21T15:10:08Z</dc:date>
    </item>
    <item>
      <title>Re: SQL join question</title>
      <link>https://communities.sas.com/t5/SAS-Programming/SQL-join-question/m-p/50849#M10651</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I also should mention that the link you provided was only to the examples from Howard's book.&amp;nbsp; If you are going to be using SQL, I strongly recommend Howard's book.&amp;nbsp; He is a master at understanding how to simplify almost any proc sql code.&amp;nbsp; As for the other question you asked, other than the SAS dates, I would think that the code does indeed conform to ANSI SQL.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 21 Aug 2011 21:27:00 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/SQL-join-question/m-p/50849#M10651</guid>
      <dc:creator>art297</dc:creator>
      <dc:date>2011-08-21T21:27:00Z</dc:date>
    </item>
    <item>
      <title>Re: SQL join question</title>
      <link>https://communities.sas.com/t5/SAS-Programming/SQL-join-question/m-p/50850#M10652</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;In the url Art.T gave ,There is already answered your question.&lt;/P&gt;&lt;P&gt;Where statement will filter the observation after left join, &lt;/P&gt;&lt;P&gt;'and' will filter the observations during left join ( but filtering will keep all the observation from left dataset, just as left join operation required).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;So 'and' in left jion will keep all the observations from left dataset,but where statement will filter observations ,even if obs are from left dataset.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Ksharp&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 22 Aug 2011 03:17:26 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/SQL-join-question/m-p/50850#M10652</guid>
      <dc:creator>Ksharp</dc:creator>
      <dc:date>2011-08-22T03:17:26Z</dc:date>
    </item>
  </channel>
</rss>

