ОШИБКА SAS: подзапрос оценивается более чем в одну строку — SQL-запрос

#sql #sas

#sql #sas

Вопрос:

Я создаю таблицу результатов, и мне нужно выполнить два подзапроса, чтобы вычислить некоторые ключевые показатели эффективности. При выполнении кода без группировки по в подзапросах это работает. Однако ключевые показатели эффективности неверны, потому что мне нужно, чтобы они были сгруппированы по ‘TRAMO_CAP_FINAL’ — если нет, я получаю одинаковые цифры для разных групп. Затем я включаю GROUP BY в подзапросы, но это не работает, и я получаю вышеупомянутую ошибку (ОШИБКА SAS: подзапрос оценивается более чем в одну строку).

Ваша помощь была бы очень признательна.

 PROC SQL;
   CREATE TABLE WORK.OUTPUT_MC_SEGMENT AS 

   SELECT "MIDCORP" AS SEGMENT,
          t1.TRAMO_CAP_FINAL,
          (SUM(t1.GWP)/SUM(t1.CAP_FINAL))*1000 AS AVG_BOOK_RATE,
          (SELECT (SUM(t1.GWP)/SUM(t1.CAP_FINAL))*1000 AS AVG_RATE_lowmid
            FROM TABLA_FINAL_MC t1
            WHERE t1.HG IN (1,2,3,4,5) AND t1.INFORCE_P=1 
            GROUP BY t1.TRAMO_CAP_FINAL),
          (SELECT (SUM(t1.GWP)/SUM(t1.CAP_FINAL))*1000 AS AVG_RATE_high
            FROM TABLA_FINAL_MC t1
            WHERE t1.HG IN (6,7,8,9) AND t1.INFORCE_P=1 
            GROUP BY t1.TRAMO_CAP_FINAL) 

   FROM TABLA_FINAL_MC t1
   WHERE t1.INFORCE_P=1
   GROUP BY t1.TRAMO_CAP_FINAL;

QUIT;
 

Пример моей цели

Ответ №1:

Используйте условную агрегацию следующим образом:

 SELECT "MIDCORP" AS SEGMENT,
          t1.TRAMO_CAP_FINAL,
          (SUM(t1.GWP)/SUM(t1.CAP_FINAL))*1000 AS AVG_BOOK_RATE,
          (SUM(case when t1.HG IN (1,2,3,4,5) AND t1.INFORCE_P=1 then t1.GWP end)/SUM(case when t1.HG IN (1,2,3,4,5) then t1.CAP_FINAL end))*1000 AS AVG_RATE_lowmid,
          (SUM(case when t1.HG IN (6,7,8,9) AND t1.INFORCE_P=1 then t1.GWP end)/SUM(case when t1.HG IN (6,7,8,9) then then t1.CAP_FINAL end))*1000 AS AVG_RATE_high
   FROM TABLA_FINAL_MC t1
   WHERE t1.INFORCE_P=1
   GROUP BY t1.TRAMO_CAP_FINAL;
 

Комментарии:

1. Это работает, Popeye. Большое спасибо за вашу любезную помощь!

2. Вы можете принять ответ, если он решил вашу проблему.