PROC SQL子查询/相关查询

时间:2015-08-30 07:37:28

标签: sql sas subquery aggregate-functions proc-sql

pro sql number;
   create table daily_total as
   select distinct trans_dt,
      sum((select (quantity * unit_price) 
           from transaction_detail 
           where subcat_num = 1111 and trans_dt = a.trans_dt))
   from transaction_detail as a
   where trans_dt between '2015-01-01' and '2015-01-02';
quit;

我知道我可以通过分组来实现同样的目标,但我希望通过子查询来实现这一目标,以获得学习体验。

我基本上想要选择两个不同的日期,并在该特定日期返回子类别的每个单独交易的总和。

谢谢。

1 个答案:

答案 0 :(得分:1)

在SQL中,SUM,AVG,MAX,MIN(取决于SQL引擎)等聚合函数不会在子查询本身上运行。

考虑以下调整,其中在子查询中使用SUM。此外,我假设您希望子查询的日期范围对应于外部查询的日期和将来的一天。因此,我使用SAS的INTNX()函数。

pro sql;
  create table daily_total as

  select distinct a.trans_dt,
    (select sum(b.quantity * b.unit_price)
     from transaction_detail As b
     where b.subcat_num = 1111  
     and (b.trans_dt between a.trans_dt 
          and intnx('day', a.trans_dt, 1)) As transaction_sum
   from transaction_detail a;

quit;