首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

!报表统计有关问题

2012-01-22 
高手请进!报表统计问题!手头有一个报表要做,简化以后,大概模型如下:有如下几张表:tJJFE--记录了各个客户的

高手请进!报表统计问题!
手头有一个报表要做,简化以后,大概模型如下:
有如下几张表:
tJJFE               --记录了各个客户的每只基金的当前持有量

KHH                     JJZH                   JJDM       JJSL
------------   ------------   ------   -----------------
000000000022   273600125785   270001   30002.00
000000001208   273600125730   270001   30002.00
000000002996   SQ8999999999   050001   30002.00
000009000016   050505050506   111001   2010002.00
000009000016   270000000007   270001   6800607002.00
000089500024   273600022981   270001   30002.00
001000000003   273600125796   270001   30002.00
011018000422   273600066512   270001   30002.00
011018000863   273600063659   270001   30002.00
011018001195   273600053551   270001   30002.00

tJJMXLS           --历史基金变动明细
RQ                   KHH                     JJZH                   JJDM       BDSL
----------   ------------   ------------   ------   ---------------------------------------
2005.03.24   311200000535   013600010514   111001   1011.00
2005.03.25   311200000963   273600125718   270001   10000.00
2005.10.31   311200000963   273600125718   270001   10000.00
2005.11.10   311200008620   000000000000   270001   1000000.00
2005.11.10   311200008620   000000000000   270001   20000000000.00
2005.11.10   311200008620   273200000006   270001   100000000.00
2006.05.16   311200000321   013600010569   202001   1000.00

tJJXXLS           --历史基金行情
RQ                   JJDM       JJJC                   JJJZ
----------   ------   ------------   ----------------
2005.03.24   202001   南方测试                   1.300000
2005.03.24   202011   南方测试                   1.500000
2005.03.25   202001   南方测试                   1.300000
2005.03.25   202011   南方测试                   1.500000
2005.10.31   202001   南方测试                   1.300000
2005.10.31   202011   南方测试                   1.500000
2005.11.10   202001   南方测试                   1.300000
2005.11.10   202011   南方测试                   1.500000
2006.05.09   202001   南方测试                   1.300000
2006.05.09   202011   南方测试                   1.500000

关联条件:
tJJFE.KHH=tJJMXLS.KHH   AND   tJJFE.JJZH=tJJMXLS.JJZH   AND   tJJFE.JJDM=tJJMXLS.JJDM

tJJFE.JJDM=tJJXXLS.JJDM

tJJMXLS.JJDM=tJJXXLS.JJDM

报表要求:
生成一个统计任意时间段内所有客户所持有的基金的日均持有量\日均市值,格式如下:

KHH                     JJZH                   JJDM                         PJCYL                                         PJCYL


------------   ------------   ------   --------   ----------------   --------------
311200008620   273200000007   270001   广发测1       30000.000000           33000.000000
NULL                   270000000007   270001   广发测1       6800607002.0           7480667702.2
311200008620   000000000000   270001   广发测1       7785267064.7           8563793771.1
311200008620   273600156543   270001   广发测1       30000.000000           33000.000000
311200008620   273600125729   270001   广发测1       30000.000000           33000.000000
311200000963   273600125718   270001   广发测1       19972.652689           21969.917958
311200008620   273200000006   270001   广发测1       38954339.106           42849773.017
311200008620   273600125741   270001   广发测1       30000.000000           33000.000000

其中,某一只基金当天的市值=当天该基金的持有量*净值(JJJZ)
日均,就是期间内每天的累计/期间天数
以上都是简化后的结果.单是统计日均持有量倒是简单,多了个日均市值,本人统计起来,虽然可以实现,但是,效率感觉不是太高.
请各位高手一起出力,群策群力,看看能不能有没有比较好的算法.

先谢谢各位了!
--通过代码实现当然好,实在不行,给个思路也可以~
再不,也得帮顶个~

提示:某一天的持有量可以根据当前的持有量   以及   历史份额变动   倒推回去

[解决办法]
帮你顶一下~
[解决办法]
帮顶吧,水平太差,不能帮你解决
[解决办法]
能不能把每列的含义介绍一下?
[解决办法]
使用存储过程来实现。
1、参数是开始日期:@StartDate 结束日期:@EndDate
2、建立一个结果表的临时表#T1。
3、把从开始日期到结束日期的所有客户信息INSERT INTO #T1 (先初始化结果表#T1)
4、按客户分类统计基金的总持有量、总市值、天数,并根据所有得的结果更新到#T1
(可以分批处理,更新到#T1)
5、UPDATE #T1 SET 日均持有量=总持有量/天数,日均市值=总市值/天数
6、DROP TABLE #T1 完成
备注:难点在于按客户分类统计基金的各个项目数据。个人认为,虽然这存储过程可能写得有点长,但对于数据量大的情况,可以采用这样的方法。速度可以比用一条统计语句中包含几个子查询,提高几时倍。



[解决办法]
总市值不好求啊,因为每天的单价不一样啊。
[解决办法]
写得这么乱。。看着都没有心情啊。。
[解决办法]
关注中
[解决办法]
这几个公式对不对,如果对的话,写语句应该不是很复杂啊。
1 某个时间段的基金总量=当前持有量×该段时间天数+SUM(该时间段内一次基金变动数量)
2 某个时间段日均持有量=该时间段基金总量/该段时间天数
3 某个时间段的总值=当前持有量×(该段时间每天的单价之和)+ SUM(一次变动的数量×当日单价)
4 某个时间段的日均值= 该时间段的总值/该段时间天数
[解决办法]
疏忽这一点了,改为
某个时间段的总值=当前持有量×(该段时间每天的单价之和)+ SUM(一次变动的数量×当日单价×(变动时间与当前时间的时间差))

[解决办法]
还是不对,改为
某个时间段的总值=当前持有量×(该段时间每天的单价之和)+ SUM(一次变动的数量×变动时间与当前时间这个时间段内的单价之和)

[解决办法]
你还是不明白我的意思
当前持有量×(该段时间每天的单价之和)
----------------------
这部分是假设没有数量变动,即先不考虑数量变动,求得总值。

SUM(一次变动的数量×变动时间与当前时间这个时间段内的单价之和)
--------------------------------
这部分是求得数量变动对总值的影响,
如果有一次数量变动,这次数量变动后一天对总值产生的影响是
变动数量×当日单价×1天
那么两天后的影响就是变动数量×单价A×1天 + 变动数量×单价B×1天


所以这次变动到今天产生的总值影响就是
变动数量×(单价A+单价B+……)×1天=变动的数量×变动时间与当前时间这个时间段内的单价之和
那么该时间段内所有的数量变动产生的总值影响就是
SUM(一次变动的数量×这次变动时间与当前时间这个时间段内的单价之和)


[解决办法]
因为我们开始取的是当前持有量,而不是该段时间期末的持有量,
所以在求数量变动对总值产生的影响时要一直考虑到当前时间,
而不是考虑到该段时间的期末。
[解决办法]
脑子乱了,重来。首先求得该段时间的期末数量
1 某个时间段的基金总量=期末数量×该段时间天数+SUM(该时间段内基金变动数量×(本次变动时间与期末时间差的天数))
2 某个时间段日均持有量=该时间段基金总量/该段时间天数
3 某个时间段的总值=期末数量×(该段时间每天的单价之和)+ SUM(一次变动的数量×变动时间与期末时间这个时间段内的单价之和)
4 某个时间段的日均值= 该时间段的总值/该段时间天数

[解决办法]
幫頂哈子

热点排行