我正在用T构建一个复杂的报告。用户给了我一个表,该表是报表的源代码,大约有10毫行。表包含描述性属性和数值列,如下所示:
片段product_group gmis lpt numeric_field1 numeric_field2 numeric_field3
报表大约有一千行,报表的定义是逐行进行的,如下所示:
‘第一行的名称’- 3,4,5段的numeric_field1和,lpt =3和gmi <> 50
“第二行”-- 1,2,3段和lpt <> 5中段的<>和,gmis =7
‘第3行’-取num2 + num3表示product_id =7
‘第4行’-第1行+第2行
因此,我最终使用了t查询,该查询对每一行都有单独的select,后面跟着union all:
'Row number 1' name, (select sum(num1) from source_table where segment in (3,4,5) and lpt=3 and gmis <> 50) value
union
'Row number 2' , (select sum(num2) from source_table where segment in (1,2,3) and lpt<> 5 and gmis = 7)
union
'Row number 3' , (select sum(num2 + num3) from source_table where product_id = 7) .……等
我是不是错过了做这种查询的更聪明的方法??因为报告很慢..。
发布于 2015-08-11 15:48:23
假设您总是从同一个基表中进行选择,并且总是在不进行分组的情况下进行聚合,那么下面的内容应该适合您的目的。
如果您仍然存在性能问题,请考虑以下选项,这些选项将取决于您的需求:
·如果您不需要报告实时数据,您可以预先计算这些值,将它们存储在另一个表中,然后从这个表中报告。
·如果您有企业版,并且不需要报告活动数据,您可以在源表上放置一个列存储索引--在Server 2012中,这使得表只能读取,因此每次将新数据加载到源表时都必须删除和重新创建。当聚合大型表时,Columnstore索引可以提供巨大的性能提升。
如果需要报告实时数据,可以使用索引视图。当在视图中聚合数据时,这可能会提高性能。
https://stackoverflow.com/questions/31842514
复制相似问题