Я понимаю, что команда PIVOT может преобразовать набор данных, это правильный путь, как это сделать? - PullRequest
1 голос
/ 11 июня 2019

У меня есть набор данных, который выглядит следующим образом:

+----+-------------+
| ID | StoreVisit  |
+----+-------------+  
| 1  |  Home Depot |
| 2  |  Lowes      | 
| 3  |  Home Depot |
| 2  |  ACE        |
| 2  |  Lowes      |
| 1  |  Home Depot |
| 4  |  ACE        |
| 5  |  ACE        |
| 4  |  Lowes      |
+----+-------------+

Я новичок в (SQL) и знаю, что могу выбрать все и затем использовать Excel (сводная таблица / функции / вставить специальные) или R (tidyr) для транспонирования .. однако, если у меня много данных, это не эффективно.Правильный ли приведенный ниже запрос?Если так, как я могу определить все значения StoreVisit, если существуют тысячи типов магазинов, не вводя каждое из них в запросе?

select * from Stores
pivot (COUNT(StoreVisit) for StoreVisit in ([ACE],[Lowes],[Home Depot])) as StoreCounts

+----+-------+-----------+-----+
| ID | Lowes | HomeDepot | ACE |
+----+-------+-----------+-----+
| 1  |   0   |     2     |  0  |
| 2  |   2   |     0     |  0  |
| 3  |   0   |     1     |  0  |
| 4  |   1   |     0     |  1  |
| 5  |   0   |     0     |  1  |
+----+-------+-----------+-----+

Пожалуйста, извините за форматирование этого поста!Много извинений.

1 Ответ

0 голосов
/ 11 июня 2019

Использовать условную агрегацию:

select id,
       sum(storevisit = 'Lowes') as lowes,
       sum(storevisit = 'HomeDepot') as HomeDepot,
       sum(storevisit = 'Ace') as ace
from t
group by id;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...