查询表格,以便一列中的数据可以显示为不同的字段

时间:2018-05-28 10:55:08

标签: sql sql-server view pivot pentaho-report-designer

我有一张存储客户服务数据的表格。表/视图具有以下结构。

    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在上个月处于第二位置并且用户标识1045在上个月处于第一位置。同样地,我也必须计算这一年 另外还有一个名为diff_percent的字段,用于计算上个月在同一位置的人之间的百分比差异。我去年必须做的事情。我怎么能达到这个结果。请帮忙。

1 个答案:

答案 0 :(得分: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};