求解速度最快的查询方法
code表:
ID(newid()) 编码 名称 末级标志
1 1001 现金 0
2 100101 现金人民币 1
3 100102 现金美圆 1
4 1002 银行 0
5 100201 银行-工行 0
6 10020101 银行-工行-人民币 1
7 100202 银行-交行 1
.
.
1200条数据左右,编号有规律
Bill表:
BillID(newid()) 年度 月份 记账人
1 2003 1 张山
2 2003 2
Bills表:
BillsID(newid() BillID codeID md mc
1 1 2 100 0
2 1 7 100
3 2 3 200 0
4 2 6 200
.
.
每年大约120000条数据
sumAccount 表
ID(newid()) codeID 年度 月份 期初 md mc
1 2 2003 1 0 100 0
2 2 2003 2 100 0 0
3 2 2003 3 100 0 0
4 2 2003 4 100 0 0
5 2 2003 5 100 0 0
6 2 2003 6 100 0 0
7 2 2003 7 100 0 0
8 2 2003 8 100 0 0
9 2 2003 9 100 0 0
10 2 2003 10 100 0 0
11 2 2003 11 100 0 0
12 2 2003 12 100 0 0
每个末级code每年都有12条数据
基本算法:现有三个参数,@post 是否包含未记帐单据
@monthF 开始月
@monthT 结束月
单据是否记账是根据bill表的记账人是否为空判断的
单据记帐后根据code和月份将数据填入sumAccount,并每个月的期初为上月的期初+md-mc.
需要输出所有code 在指定开始月和结束月的期初、md、mc。
在表bills和sumaccount的code均为末级code,输出时需合计至上级code,每级递加。
计算规则:如果@post=0(不包含),期初在sumaccount中直接取开始月的期初数,md、mc为开始月至结束月的合计md、mc数。
如果@post=1(包含)期初数为上面算出的期初数加上第一月至开始月(不包括开始月)的md合计-mc合计,md、mc为开始月至结束月(不包括结束月)的md合计、mc合计
输出结果,开始月 1 结束月 5 @Post=0
ID(newid()) 编码 名称 期初 md mc
1 1001 现金 0 100 0
2 100101 现金人民币 0 100 0
3 100102 现金美圆 0 0 0
4 1002 银行 0 0 100
5 100201 银行-工行 0 0 0
6 10020101 银行-工行-人民币 0 0 0
7 100202 银行-交行 0 0 100
输出结果,开始月 1 结束月 5 @Post=1
ID(newid()) 编码 名称 期初 md mc
1 1001 现金 0 300 0
2 100101 现金人民币 0 100 0
3 100102 现金美圆 0 200 0
4 1002 银行 0 0 300
5 100201 银行-工行 0 0 200
6 10020101 银行-工行-人民币 0 0 200
7 100202 银行-交行 0 0 100
现在我做的code有1000条数据,bills有6000条数据,速度不是很理想,超过了20秒,请高手指点一个速度比较快的算法