Проблема с систаксом ‹alias›.* для выбора всех столбцов из одной таблицы

Я делаю соединение здесь, где я в основном беру все столбцы из одной таблицы с первичным ключом и многими другими столбцами (слишком много, чтобы хотеть печатать), а затем присоединяюсь ко второй таблице, где все столбцы будут агрегированы по первичный ключ первого.

Упрощенная версия выглядит следующим образом:

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.* ;

Я знаю, что приведенный выше синтаксис работает в программах SQL, таких как Teradata, но в SAS Enterprise Guide, используя PROC SQL, я получаю следующую ошибку:

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

По сути, SAS, похоже, не распознает *, когда ему предшествует псевдоним.

Какие-либо предложения? Спасибо.


person Peppers16    schedule 22.06.2015    source источник


Ответы (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.

person Gordon Linoff    schedule 22.06.2015

Если вам действительно нужно сгруппировать по всем столбцам в таблице 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
person Reeza    schedule 22.06.2015