复杂存诸过程,有点难。

liboji 2003-08-29 10:06:09
复杂存诸过程,有点难。
表1:
职工代码部门01 基数01 部门02 基数02 ... 部门12 基数12 (共12个月) 年份
1 101 10 101 15 ... ... ... 2003
2 101 10 201 5 ... ... ... 2003
3 101 5 999 0 ... ... ... 2003
4 201 10 201 5 ... ... ... 2003
5 201 10 201 15 ... ... ... 2003
6 201 5 201 30 ... ... ... 2003
7 0 0 201 10 ... ... ... 2003
表2
部门代码 部门名称
101 机关
201 东西矿
... ...
999 退休

想要得到的结果 (假设用户选择的是2月份,具体是哪个月份根据用户选择决定)。

部门名称 上月基数 本月增加数 本月减少数 本月数
机关 25 5 10 15
东西矿 25 45 5 65
... ... ... ... ...
(没有"退休"这个部门)
合计 ... ... ... ...



注:(1)月份是用户选择决定的。如果选择1月,则上月为2002年月12月,当然数据也在
表1中。
(2)7号职工为2003年2月新来职工,所以1月部门为0,基数为0
(3)3号职工2003年2月退休,所以2月部门为999,退休职工基数为0。
(4)2号职工2月份从机关调到了东西矿,所以部门02变为201
(5)退休职工是没有基数的,所以按部门合计中是不包括退休的。
(6)机关本月增加数5是1号职工增加的
(7)机关本月减少数10是2号职工从机关调到了东西矿
(8)东西矿本月增加45是5号职工增加了5,6号职工增加了25,2号职工从机关调来增
加了5,企业新来7号职工增加10,共计45。
(9)东西矿本月减少5是4号职工减少了5。

请高手给个存储过程,先谢了。
...全文
27 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
shuttlehorse 2003-09-08
  • 打赏
  • 举报
回复
帮助中有现成的例子
建议用临时表来简化
liboji 2003-09-08
  • 打赏
  • 举报
回复
i have send msg to u,check it ~
yonghengdizhen 2003-09-01
  • 打赏
  • 举报
回复
select 部门名称,
case @月份
when '01' null
when '02' 01月数
when '03' 02月数
when '04' 03月数
when '05' 04月数
when '06' 05月数
when '07' 06月数
when '08' 07月数
when '09' 08月数
when '10' 09月数
when '11' 10月数
else '12' 11月数
end
AS 上月基数,
case 月份
when '01' 01月数
when '02' 02月数
when '03' 03月数
when '04' 04月数
when '05' 05月数
when '06' 06月数
when '07' 07月数
when '08' 08月数
when '09' 09月数
when '10' 10月数
when '11' 11月数
else '12' 12月数
end
AS 本月基数,
FROM
(select
部门名称,
(select sum(基数01) where 部门01=表2.部门代码) as 01月数,
(select sum(基数02) where 部门02=表2.部门代码) as 02月数,
(select sum(基数03) where 部门03=表2.部门代码) as 03月数,
(select sum(基数04) where 部门04=表2.部门代码) as 04月数,
(select sum(基数05) where 部门05=表2.部门代码) as 05月数,
(select sum(基数06) where 部门06=表2.部门代码) as 06月数,
(select sum(基数07) where 部门07=表2.部门代码) as 07月数,
(select sum(基数08) where 部门08=表2.部门代码) as 08月数,
(select sum(基数09) where 部门09=表2.部门代码) as 09月数,
(select sum(基数10) where 部门10=表2.部门代码) as 10月数,
(select sum(基数11) where 部门11=表2.部门代码) as 11月数,
(select sum(基数12) where 部门12=表2.部门代码) as 12月数
from 表2) temptable

至于你的本月增加和本月减少数看不出有什么用意
yonghengdizhen 2003-08-31
  • 打赏
  • 举报
回复
如果我没猜错的话,后面的年份应该是不同的.
yonghengdizhen 2003-08-31
  • 打赏
  • 举报
回复
如果说横向重复是时间维度上的变化的话,那么它的纵向重复代表什么?
为什么在首个月份纵向重复单位代码,而第二个月却单位代码变化了呢.

你应该清楚的描述你数据表所代表的业务逻辑.
yonghengdizhen 2003-08-31
  • 打赏
  • 举报
回复
不明白你的部门代码的纵向横向重复是什么意思.

这个问题是一个复合查询的问题.当然你写成存储过程也未尝不可
liboji 2003-08-31
  • 打赏
  • 举报
回复
关于部门横向和纵向重复的解释:
(1)横向重复:因为职工有可能根据工作需要进行部门调动,所以每个职工一年中会有12个部门代码(分别为字段:部门01......部门12)
举例:2号职工2003年1月在机关(101)工作,2月根据工作需要被调到了东西矿(201)工作,所以2号职工的2003年的 部门01为101,部门02为201。如果职工一年内都没有调动那么从部门01到部门12部门代码就会有12次重复。(如1号职工)
(2)纵向重复:1,2,3号职工在2003年01月都是机关的,所以部门01都是101,到了2003年2月,2号职工部门调动了所以部门02变成了201,3号职工很休了,所以部门02变成了999。
(3)年份是变化的。我举得例子是2003年的,所以年份是2003,2002年的数据也是在表1中。
(4)一年共12个月,这个是不会变的,所以才会有部门01——部门12,只用年份这个字段标记一下年的变化即可。

不知我说清楚没有?大虾们帮帮忙啦!!!

liboji 2003-08-29
  • 打赏
  • 举报
回复
更正:机关本月减少数是15不是10,还有一名退休职工减少了5。

28,390

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧