动态生成的sql pivot与计算列的一般方法

时间:2015-06-05 04:04:57

标签: sql

我有以下情况: 生成具有动态列的数据透视表,我可以通过在客户端或存储过程中生成动态sql来管理

然后,我需要根据枢轴已计算的值计算其他值。

这是用于生成过程中所有步骤的sql:

select  'Union and repivot' as src,* from (

select       
 departmentStats2.Facility,
departmentStats2.Department,Departmentstats2.period,x.stat,x.value
from
 departmentStats2
  cross Apply(
        values(Facility,Department,Period,'1_Sales',Sales),
               (Facility,Department,Period,'2_Cost',Cost),
               (Facility,Department,Period,'3_GrossProfit',GrossProfit),
               (Facility,Department,Period,'4_GPP',GPP)
) as x(Facility,Department,Period,Stat,[Value])
 )as P
    pivot(
       sum(value)
       for Period in (January, February, March)
    )as P
    order by Facility,department,Stat

我只为样本提供了三个句点。

enter image description here

我毫不怀疑我可以随意生成这种格式的SQL。

考虑到我的数据源将是静态的(每日更新)并且索引严重,我预计不会出现任何实际问题。我还没有准备好测试的完整数据集,但是当我做

时我会更新q

枢纽奥运会的原因是最终输出实际上是电子表格,它使用索引/匹配来按设施/部门/名称查找每个统计数据的值,以生成图形和图表

意见? 明显的缺陷? 通过在运行时生成一个类,在C#中做得更好吗? 请记住,这个想法是提供基于已知统计数据添加统计数据的能力,而且工作量最小。

这是使用交叉应用而不是全部联合

执行最后一步的更好方法
tickPixelInterval

http://sqlsunday.com/2014/03/02/unpivot-using-cross-apply/

0 个答案:

没有答案