Группировка нескольких отсчетов с каждой строкой, представляющей один идентификатор - PullRequest
2 голосов
/ 12 октября 2010

У меня есть таблица, которая регистрирует активность. Он имеет столбец int Activity, который указывает, какой это был вид деятельности, и соответствующий admin_id, который указывает, какой администратор выполнил действие. Каждая строка в таблице представляет одно действие, поэтому, например, администратор может отменить учетную запись пользователя, и будет создана строка с этим идентификатором администратора и активность = [int, представляющая отмену]. Мне нужен способ выбрать результат, который группирует действия каждого администратора так, чтобы строка, соответствующая администратору, имела бы номер каждого действия

Результат будет выглядеть как

admin_id | numActivated | numCanceled | numRenewed
1          1              1             2
2          1              3             0

С numActivation, numCanceled и numRenewed все поступает из подсчета для каждого действия.

Вот как должна выглядеть исходная таблица:

admin_id | activity ...
1          2
1          1
1          3
1          3
2          2
2          2
2          2
2          1

(операция 1: активировать, 2: отменить, 3: возобновить)

Спасибо

Ответы [ 2 ]

3 голосов
/ 12 октября 2010

Это должно сделать то, что вы просите:

select admin_id,
       sum(case when activity = 1 then 1 else 0 end) as numActivated,
       sum(case when activity = 2 then 1 else 0 end) as numCanceled,
       sum(case when activity = 3 then 1 else 0 end) as numRenewed
    from YourTable
    group by admin_id
0 голосов
/ 12 октября 2010

Это должно сделать это:

SELECT
    T.admin_id,
    sum(T.activate) AS numActivated,
    sum(T.canceled) AS numCanceled,
    sum(T.renew) AS numRenewed
FROM (
    SELECT
        admin_id,
        CASE activity WHEN 1 THEN 1 ELSE 0 END AS activate,
        CASE activity WHEN 2 THEN 1 ELSE 0 END AS canceled,
        CASE activity WHEN 3 THEN 1 ELSE 0 END AS renew
    FROM Table
) AS T
GROUP BY T.admin_id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...