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

У меня есть таблица, в которой хранятся данные обслуживания клиентов. Таблица/представление имеет следующую структуру.

    userid  calls_received    calls_answered    calls_rejected   call_date  
-----------------------------------------------------------------------  
    1030        134              100              34             28-05-2018  
    1012        140              120              20             28-05-2018  
    1045        120              80               40             28-05-2018  
    1030        99               39               50              28-04-2018  
    1045        50               30               20             28-04-2018  
    1045        200              100              100            28-05-2017  
    1030        160               90              70             28-04-2017  
    1045        50               30               20             28-04-2017    

Это примерные данные. Данные хранятся по дням.
Мне нужно создать отчет в программном обеспечении для создания отчетов, которое использует дату в качестве входных данных. Когда пользователь выбирает дату, например. 28.05.2018. Эта дата передается как параметр ${call_date}. я должен запросить представление таким образом, чтобы результат выглядел так, как показано ниже. Если пользователь выбирает дату 28.05.2018, то данные за 28.04.2018 и 28.05.2017 должны отображаться рядом, как показано ниже в порядке столбцов.

    userid | cl_cur | ans_cur | rej_cur |success_percentage |diff_percent|position_last_month| cl_last_mon | ans_las_mon | rej_last_mon |percentage_lm|cl_last_year | ans_last_year | rej_last_year
    1030   | 134    |  100    |  34     |      74.6 %       |  14%       |   2               |      99     |   39        |      50      |  39.3%      | 160         |  90           |  70   
    1045   | 120    |  80     |  40     |      66.6%        |  26.7%     |     1             |      50     |   30        |      20      |   60%       | 50          |  30           |  20   

Цель этого запроса — показать данные за выбранный день, данные за тот же день в предыдущем месяце и за тот же день в предыдущие годы в столбцах, чтобы пользователь мог посмотреть и сравнить. Здесь результат упорядочен по проценту (ans_cur/cl_cur) выбранного дня в порядке убывания рассчитанного процента и отображается в разделе success_percentage.
Столбец position_last_month — это должность этого конкретного сотрудника в предыдущем месяце, когда она упорядочена в порядке убывания процент. В этом примере идентификатор пользователя 1030 был на 2-й позиции в прошлом месяце, а идентификатор пользователя 1045 — на 1-й позиции в прошлом месяце. Точно так же я должен вычислить это и для года.
Также есть поле под названием diff_percent, которое вычисляет разницу в процентах между людьми, которые были в той же должности в прошлом месяце. То же самое я должен сделать для прошлого года. Как я могу добиться этого результата. Пожалуйста, помогите.


person Bommu    schedule 28.05.2018    source источник
comment
Ваша строка поиска Google - это сводной запрос сервера sql.   -  person Dan Bracuk    schedule 28.05.2018


Ответы (1)


ЭТО ОТВЕЧАЕТ НА ОРИГИНАЛЬНУЮ ВЕРСИЮ ВОПРОСА.

Одним из методов является join:

select t.user_id, 
       t.calls_received as cr_cur, t.calls_answered as ca_cur, t.calls_rejected as cr_cur,
       tm.calls_received as cr_last_mon, tm.calls_answered as ca_last_mon, tm.calls_rejected as cr_last_mon,
       ty.calls_received as cr_last_year, ty.calls_answered as ca_last_year, ty.calls_rejected as cr_last_year
from t left join
     t tm
     on tm.userid = t.userid and
        tm.call_date = dateadd(month, -1, t.call_date) left join
     t ty
     on ty.userid = t.userid and
        tm.call_date = dateadd(year, -1, t.call_date)
where t.call_date = ${call_date};
person Gordon Linoff    schedule 28.05.2018
comment
Большое спасибо за ваше решение. Это действительно сработало для меня. Но у меня больше требований. Я отредактировал вопрос. Не могли бы вы помочь. - person Bommu; 31.05.2018