Нужна общая сумма для пользователей в sql - PullRequest
0 голосов
/ 21 октября 2019

У меня есть следующая таблица.

    Result1         
ID  PT  IT  CC  I_user  D_user
123 10  1   1   ABC      ABC
256 20  5   2   xyz      ABC
389 15  2   5   SRT      xyz
522 20  3   1   ABC      SRT
655 10  2   4   xyz      ABC
788 20  1   3   SRT      xyz
921 15  5   2   ABC      SRT
105 10  4   4   xyz      ABC

Требуемый набор результатов из запроса

User  PT      IT    CC
ABC   85      20    14
xyz   75      14    18
SRT   70      11    11

Любая помощь приветствуется. Я использую Google SQL, но я думаю, стандартный SQL также будет работать ..

Ответы [ 2 ]

1 голос
/ 21 октября 2019

Я предполагаю, что вам нужны агрегированные итоги PT, IT, CC для каждого пользователя в I_user или D_user.

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

SELECT "User", SUM(PT) AS PT,  SUM(IT) AS IT,  SUM(CC) AS CC
FROM
(
    SELECT I_user as "User", SUM(PT) AS PT,  SUM(IT) AS IT,  SUM(CC) AS CC
    FROM YourTable
    GROUP BY I_user

    UNION ALL

    SELECT D_user, SUM(PT),  SUM(IT),  SUM(CC)
    FROM YourTable
    WHERE (D_user != I_user OR I_user IS NULL)
    GROUP BY D_user
) AS q
GROUP BY "User"
ORDER BY "User";
1 голос
/ 21 октября 2019

Я бы подошел к этому, используя боковое соединение и агрегирование:

select v.user, sum(t.pt) as pt, sum(t.it) as it, sum(t.cc) as cc
from t cross apply
     (values (t.I_user), (t.D_user)) v(user)
group by v.user;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...