Добавить отметку о значениях строк - PullRequest
0 голосов
/ 06 августа 2020

У меня есть таблица (Student_classification) с двумя столбцами: Номер студента и Тема (пример):

Student Number         Subject
122                      Biology_Physics
122                      Math
122                      Music
125                      music
125                      geography
298                      Math
298                      Economics

Моя задача - получить новую таблицу, где:

  1. если номер студента имеет значение Biology_Physics и (либо Math, либо Musi c, либо география, либо экономика) как Science
  2. , если номер студента имеет (geography или musi c) и не имеет другого как Humnity / Arts
  3. , если студент имеет (математику или экономику) и не имеет другого как EconomicsEngineering

Мой окончательный результат должен быть:

Student Number        Type
122                    Science
125                    Humanity/arts
298                    EconomicsEngineering

Однако, Я получаю следующую таблицу, которая неверна:

Student_Number             Type
122                         Other
122                         EconomicEngineering
122                         Humanity/arts
125                         Humanity/arts
298                         EconomicEngineering

Я написал следующий код в SAS, но логика кажется неверной:

Proc Sql;
create table student_classification as
(
select distinct cust_num,
case
when Subject ='Biology_Physics' and Subject in ('Math' 'Music' 'geography' 'economics') then 'Science'
When Subject in ('geography' 'music') and Subject not in ('Biology_Physics' 'Math' 'economics') then 'Humanity/arts'
When Subject in ('math' 'economics) and subject not in ('Biology_Physics' 'Geography' 'Music') then 'EconomicEngineering'
else 'Other'
end as Type
from Student_classification
Group by student_number, Type
);
quit;

Мой вариант использования отличается, но имитирует похожая идея здесь.

1 Ответ

0 голосов
/ 06 августа 2020

Вы пытаетесь сравнить значения из нескольких строк, поэтому вам нужно условное агрегирование .

select cust_num,
    case 
      -- has Biology_Physics and (either Math or Music or geography or economics) as Science
      when max(case when Subject ='Biology_Physics' then 1 end) = 1
       and max(case when Subject in ('Math', 'Music', 'geography', 'economics') then 1 end) = 1 
      then 'Science'

      -- has (geography or music) and do not have any other as Humnity/arts
      When max(case when Subject in ('geography', 'music') then 0 else 1 end) = 0
      then 'Humanity/arts'

      -- has (Math or Economics) and do not have any other as EconomicsEngineering
      When max(case when Subject in ('math', 'economics) then 0 else 1 end) = 0
      then 'EconomicEngineering'
      else 'Other'
    end as Type

from Student_classification
Group by cust_num
...