SQL / pivot计算字段,这是可能的

时间:2016-12-13 19:56:09

标签: sql-server excel-vba vba excel

我正在使用Microsoft SQL Server和Excel。我有一个问题,我遇到问题,围绕如何计算一些字段,以便它运行得更快。我有一个大型数据集,它被放入excel并插入数据透视表。

最简单的表格将包含许多类似于下面的字段。

日期用户工作类型计数总时间

我的问题是我需要以特定方式计算平均值。每个用户在任何一天都可能有几种工作方式。我的公式是每个日期和用户总和(总时间)/总和(计数)给我以下

日期用户平均值

目前我将选择查询转储到Excel中,将公式应用于列以获取我的平均值,然后使用个人详细信息和平均值构建数据透视表。

超过20,000行的计算约为5-7分钟。

所以我的问题是可以在SQL或Pivot表中进行这种类型的计算以减少处理时间。我对Pivot表并不是很有信心,而且与SQL相比,我认为SQL相当缺乏经验。我可以管理这一点,但是把它全部与匹配日期和用户的条件一起拉到我身边。

我可以将记录集解析为数组,以便在写入电子表格之前以这种方式进行计算,但我觉得应该有更好的方法来实现相同目的。

2 个答案:

答案 0 :(得分:0)

SQL中预先计算的聚合在Excel Pivot中可能会出错。

首先,您可能会意外地取平均值。

其次,一旦用户开始重新安排枢轴,你就会得到非常奇怪的小计和总数。

尽量确保在一个地方进行所有聚合。 如果可能,请尝试将SQL与SSRS一起使用,您可以基于参数化存储过程创建报告。因此,您将所有艰苦的工作推送到SQL框,并限制用户不正确地转动事物。

答案 1 :(得分:0)

SELECT Raw_Data.ID,Raw_Data.fldDate,CONVERT(datetime,DATEADD(second,SUM(DATEDIFF(second,0,Raw_Data.TotalHandle))/ SUM(Raw_Data。[Call Count]),0),108)AS avgHandled FROM Raw_Data WHERE(Raw_Data.fldDate BETWEEN '05 -12-2016'和'07 -12-2016') GROUP BY Raw_Data.fldDate,Raw_Data.ID

对于任何感兴趣的人都是我搜索的结果。感谢您指导我正确方向的帮助。由于时间数据类型的转换似乎非常笨拙,但它正在工作。