麻烦用<alias>。* systax从一个表中选择所有列

时间:2015-06-22 13:37:37

标签: sql sas proc-sql

我正在这里进行连接,我基本上从一个表中获取主键和许多其他列的所有列(太多而不想输入),然后离开加入第二个表其中所有列将与第一个主键聚合在一起。

简化版如下:

SELECT a.*, COUNT(DISTINCT b.date), SUM(b.spend)
FROM table_1 a 
LEFT JOIN table_2.b
ON a.cust_id = b.cust_id
GROUP BY a.* ;

我知道上面的sytax适用于Teradata等SQL程序,但在SAS Enterprise Guide中,使用PROC SQL,我收到以下错误:

ERROR: * used in an illegal position.
ERROR: The following columns were not found in the contributing tables: a.

基本上,当SAS出现别名时,SAS似乎无法识别*。

有什么建议吗?感谢。

2 个答案:

答案 0 :(得分:2)

您有b别名之前的句号。此外,你不能group by *。试试这个:

SELECT a.*, COUNT(DISTINCT b.date), SUM(b.spend)
FROM table_1 a LEFT JOIN
     table_2 b
------------^
     ON a.cust_id = b.cust_id
GROUP BY a.cust_id ;

这假设cust_idtable_1是唯一的。

答案 1 :(得分:1)

如果您确实需要按表A中的所有列进行分组,请查看反馈选项,该选项将列出日志中表中的所有字段,您可以将其复制并粘贴到group by子句中。

6    proc sql feedback;
7    create table want as
8    select *
9    from sashelp.class as a;
NOTE: Statement transforms to:

        select A.Name, A.Sex, A.Age, A.Height, A.Weight
          from SASHELP.CLASS A;

NOTE: Table WORK.WANT created, with 19 rows and 5 columns.

10   quit;
NOTE: PROCEDURE SQL used (Total process time):
      real time           0.04 seconds
      cpu time            0.00 seconds