Как использовать Где вместо Group by? - PullRequest
0 голосов
/ 27 сентября 2019

Я написал запрос, который дает мне такой результат:

enter image description here

(Это всего лишь пример, очевидно, что таблица вывода содержит приблизительно 300000 строк)

И это мой запрос:

  proc sql;
  create Table Output as 
  select ID_User, Division_ID, sum(conta) as Tot_Items, max(Counts) as Max_Item
  from (select c.ID_User , c.Div_ID as Division_ID, ro.code as Mat, count(*) as Counts
  from Ods.R_Ordini o
  inner join DMC.Cust_Dupl c
   on User_ID = ID_User
  inner join ods.R_Nlines ro
   on ro.Orders_Id = o.Id_Orders AND RO.SERVICE = 0
  inner join ods.R_Mat m
   on ro.Mat_Id = Id_Mat and flag = 0
  group by 
      ID_User,
      C.Division_ID,
      Ro.Code
      Having Counts > 1
     )
  group by
  Id_User,
  Division_ID
  Order by 
  Tot_Item DESC
  ;
  quit;

Итак, я хочу переписать этот запрос, но вместо группы я хочу использовать условие Where, (WHERE= (DIVISION_ID = 3)) это условие.

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

любая помощь будет высоко ценится, спасибо.

Ответы [ 2 ]

0 голосов
/ 27 сентября 2019

Просто используйте WHERE DIVISION_ID = 3 перед группировкой по.

выберите ID_User, Division_ID, sum (conta) в качестве Tot_Items, max (Count) в качестве Max_Item из (выберите c.ID_User, c.Div_ID в качестве Division_ID,ro.code as Mat, count (*) as Подсчитывает из Ods.R_Ordini o внутреннее объединение DMC.Cust_Dupl c on User_ID = ID_User внутреннее соединение ods.R_Nlines ro on ro.Orders_Id = o.Id_Orders AND RO.SERVICE = 0 внутренние объединения.R_Mat m on ro.Mat_Id = Id_Mat и flag = 0 WHERE DIVISION_ID = 3, группа по ID_User, C.Division_ID, Ro.Code, имеющий количество> 1), группа по Id_User, Division_ID Порядок по Tot_Item DESC

0 голосов
/ 27 сентября 2019

Опцию набора данных SAS (where=(<where-expression>)) можно кодировать только рядом с именем набора данных.Таким образом, эта опция должна быть применена к набору данных, содержащему столбец div_id, который является основой для вычисляемого столбца division_id.Это будет псевдоним таблицы c

DMC.Cust_Dupl(where=(div_id=3)) as c

Или просто используйте обычный SQL-оператор where

…
)
where division_id=3
group by … 
...