我正在这里进行连接,我基本上从一个表中获取主键和许多其他列的所有列(太多而不想输入),然后离开加入第二个表其中所有列将与第一个主键聚合在一起。
简化版如下:
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似乎无法识别*。
有什么建议吗?感谢。
答案 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_id
中table_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