【问题标题】:Using Rollup with SQL produces double results将 Rollup 与 SQL 一起使用会产生双重结果
【发布时间】:2015-03-08 01:19:15
【问题描述】:

我正在运行查询以尝试按星期几获取一些指标以及总数。我正在使用 ROLLUP 来获得一周的总平均值。但是,当我这样做时,我看到结果翻了一番。数字是相同的,我验证它们是正确的。但是,我希望它只在周日至周六生产,总计如下。有没有办法重写这个查询来做到这一点?

select DATEPART(dw,t1.Call), DATENAME(dw,t1.Call),
AVG (T1.CallSec + T1.ACWSec) AS AHT
from bm.calls t1 with (nolock)
JOIN prc.RRequest rreq
on t1.callid = rreq.t1CallID
join PRC.RRaw rraw with (nolock) 
on rreq.RoutingID = rraw.RoutingId
where t1.CallDate >= '2014-01-01'
AND rraw.RMode='Active'
GROUP BY  ROLLUP (DATEPART(dw,t1.Call)),(DATENAME(dw,t1.Call) )

这是我得到的输出

NULL    Monday  367.70605696962
NULL    Sunday  335.661825117371
NULL    Tuesday 359.261558682542
NULL    NULL    353.421450966283
NULL    Friday  361.478009630819
NULL    Saturday    354.216226822329
NULL    Thursday    330.073051380636
NULL    Wednesday   345.357746478873
1       Sunday      335.661825117371
2       Monday      367.70605696962
3       Tuesday     359.261558682542
4       Wednesday   345.357746478873
5       Thursday    330.073051380636
6       Friday      361.478009630819
7       Saturday    354.216226822329

期望的输出应该是

1       Sunday      335.661825117371
2       Monday      367.70605696962
3       Tuesday     359.261558682542
4       Wednesday   345.357746478873
5       Thursday    330.073051380636
6       Friday      361.478009630819
7       Saturday    354.216226822329
NULL    NULL        353.421450966283

【问题讨论】:

  • 你能添加你想要的输出吗?
  • @Mihai - 两种方式都可以
  • @GoatCO 添加了想要的结果

标签: sql sql-server rollup


【解决方案1】:

我相信您只需要更改您的 ROLLUP 以包含这两个字段:

SELECT  DATEPART(dw, t1.Call)
      , DATENAME(dw, t1.Call)
      , AVG(T1.CallSec + T1.ACWSec) AS AHT
FROM    bm.calls t1 WITH ( NOLOCK )
        JOIN prc.RRequest rreq ON t1.callid = rreq.t1CallID
        JOIN PRC.RRaw rraw WITH ( NOLOCK ) ON rreq.RoutingID = rraw.RoutingId
WHERE   t1.CallDate >= '2014-01-01'
        AND rraw.RMode = 'Active'
GROUP BY ROLLUP((DATEPART(dw, t1.Call), DATENAME(dw, t1.Call)))

ROLLUP() 将根据包含的字段集添加小计/总计行,您可以通过将多个字段括在括号中将它们组合为一组。

因此,ROLLUP(col1,col2) 将在总计之外生成col2 中的每个更改的小计。而ROLLUP((col1,col2)) 会将两列合并为一组,因此仅显示总计。

【讨论】:

  • 产生这个。再次事情重复1星期日335.661825117371 1 NULL 335.661825117371 2星期一367.70605696962 2 NULL 3 367.70605696962星期二359.261558682542 3 NULL 359.261558682542 4星期三345.357746478873 4 NULL 345.357746478873 跨度>
猜你喜欢
  • 1970-01-01
  • 2013-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-25
  • 1970-01-01
  • 2013-03-15
  • 1970-01-01
相关资源
最近更新 更多