получение отличного члена с несколькими продуктами - PullRequest
0 голосов
/ 05 февраля 2019

У меня есть список людей, у которых может быть один продукт или до 10 продуктов.Я хочу иметь возможность классифицировать человека по категориям продуктов.Например:

Person| Product| Store_Online 
--------------------------------
A     | A_1    | Store
A     | A_2    | Online
B     | A_1    | Store
B     | A_1    | Store
C     | A_1    | Store
C     | A_1    | Online
C     | A_1    | Store
D     | A_1    | Online

Я хочу показать в результате следующее:

Person| Product| Store_Online
--------------------------------
A     |2Products| Both
B     | Single  | Store
C     | Single  | Both
D     |Single   |Online

Я не могу придумать что-то, что могло бы дать мне то, что яЯ надеюсь, что получу.

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

Ответы [ 2 ]

0 голосов
/ 05 февраля 2019

Возможно простое условное агрегирование

Пример

Select Person
      ,Product      = case when count(Distinct Product)      = 1 then 'Single' else concat(count(Distinct Product),'Products') end
      ,Store_Online = case when count(Distinct Store_Online) = 1 then max(Store_Online) else 'Both' end
  from @YourTable
 Group By Person

Возвращает

Person  Product     Store_Online
A       2Products   Both
B       Single      Store
C       Single      Both
D       Single      Online
0 голосов
/ 05 февраля 2019

Я бы использовал APPLY:

SELECT DISTINCT t.person, 
       (CASE WHEN Product_CNT > 1 THEN '2Products' ELSE 'Single' END),
       (CASE WHEN Store_Online_CNT > 1 THEN 'Both' ELSE Store_Online END)
FROM table t CROSS APPLY
     ( SELECT COUNT(DISTINCT Product) AS Product_CNT, 
              COUNT(DISTINCT Store_Online) AS Store_Online_CNT
       FROM table t1
       WHERE t1.person = t.person
     ) t1;
...