SQL2005CLR函数扩展-深入环比计算的详解

此类问题还可以延伸到类似进销存的批次计算中,这也要关注其他历史记录来决定当前某条记录的状态。

sql语句无法简单实现mdx语句的类似功能,必须得用交叉表关联来对比。这里我们用clr函数来实现mdx语句的类似语法。在select的时候把得到过的做个缓存就可以了。效率应该可以提高不少。

clr的代码如下,编译为testfun.dll,复制到sql服务器的文件目录下。
——————————————————————————–

——————————————————————————–
部署和生成自定义函数,其中考虑到并发,我们还是需要一个并发键来表达当前查询
——————————————————————————–

——————————————————————————–
这样我们就可以使用了,测试脚本如下, xfn_getprevmembervalue就是获取上月价格的函数。
——————————————————————————–
— 建立测试环境
 
— 测试语句
 
— 结果
/*
区域   trademonth tradeprice             lastmonthprice         环比
—- ———- ———————- ———————- ———–
闵行   2007-03    8796.67                null                   null
闵行   2007-04    9267.19                8796.67                5.35%
闵行   2007-05    9335.26                9267.19                 0.73%
浦东   2007-01    8976.73                null                   null
浦东   2007-02    12568.05               8976.73                40.01%
浦东   2007-03    8023.98                12568                  -36.16%
浦东   2007-04    18337.23                8023.98                128.53%
普陀   2007-01    11549.02               null                   null
普陀   2007-02    13496.24               11549                  16.86%
普陀   2007-03    7834                   13496.2                -41.95%
*/
——————————————————————————–
这个函数写的还是比较粗糙,如果进一步改进还可以详细定义如何获取上一个维度的方法。这里只是根据查询顺序来做缓存。感兴趣的朋友可以完善一下。

(0)
上一篇 2022年3月22日
下一篇 2022年3月22日

相关推荐