首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • [向libin_ftsafe提问]一个实际的应用问题
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • FreeSarge
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 结帖率:
    发表于:2008-08-21 12:54:41 楼主
    表结构

    公司表 Employer
    列名 类型 描述
    RowID        int          主键
    EmployerName Nvarchar(20)  公司名称

    计划年份 PlanYear
    列名          类型            描述
    RowID        int          主键
    PlanYearName Nvarchar(20) 年计划名称

    计划表    PlanInfo
    列名        类型            描述
    RowID      int      主键
    EmployerID int      公司编号
    PlanYearID int      计划年份标号

    计划时间表 PlanDates
    列名          类型            描述
    RowID        int        主键
    PlanInfoID  int        计划编号
    FactPlanDate DateTime  计划实际发生日期


    模拟数据

    RowID PlanInfoID FactPlanDate
    1        1        2008-7-1
    2        1        2008-7-8
    3        1        2008-7-15
    4        1        2008-7-22


    计划时间表                      PlanDateRules
    列名            类型                  描述
    RowID        int                主键
    PlanInfoID    int                计划编号
    Rule          Nvarchar(20)        规则类型(下边是类型说明)
    RuleDate1    Nvarchar(20)        规则1
    RuleDate2    Nvarchar(20)        规则2

    Employer表 代表公司,公司(EmployerID)每年都有相关的计划 存储在 PlanInfo 表
    每个计划(PlanInfoID) 由公司(EmployerID)和 计划年份(PlanYearID) 组成
    每个计划(PlanInfoID)的实际执行日期都会发生在 PlanDates表 里 ,
    每个 (PlanDatesID)由 计划(PlanInfoID)和实际执行的时间组成.
    每个计划(PlanInfoID)都存在一种计划执行时间规则 PlanDateRules表 里 ,
    每种计划执行时间规则(PlanDateRulesID)由 计划(PlanInfoID)和计划规则组成(Rule)
    RuleDate1(规则日期),RuleDate2(规则日期)组成。

    如果我叙述的不清晰,大家可以打开数据库关系图

    需求:这是一个水晶报表项目,需要显示某公司(EmployerID)某年份(PlanYearID)计划执行时间的实际计划执行时间。
    这个部分的功能,我已经完成了,我是通过函数生成 计划执行日期(PlanDateRulesID)和实际执行日期查询的结果进行连接。
    Sql脚本中包含一个存储过程和5个方法,去完成以上功能。

    现在的客户需求发生了变化,在查询中加入了 {全部}条件,这个是比较头痛的事情,在两个条件都选择All的时候(PlanYearID, EmployerID),需要查询的结果是两个字段笛卡尔积的结果去执行我的存储过程。
    但这样效率实在太慢,而且我的办法也很笨,本人的数据库的基础很差,希望高手能给些指点。

    查询条件 为 ALL的时候, PlanYearID, EmployerID 为全部 的迪卡积极集合 在去执行,我写的存储过程。
    我想要一种高效的方式。

    谢谢大家

    测试数据脚本 地址
    http://topic.csdn.net/u/20080821/10/5162083c-87d3-43c5-9519-06c5a1712262.html


    Rule字段(类型说明)
    Weekly,Semi-Monthly,Monthly-Date,Monthly-Day of Week, Manual. 在系统中,
    每当选择不同的种类时,会有相应的dropdownList 显示出1个或者两个供选的字段。如
    果出现一个dropdownlist,那个这个值在TBL_PlanDateRules. RuleDate1中, 如果出现
    两个: 第一个的值在TBL_PlanDateRules. RuleDate1中,第二个在
    TBL_PlanDateRules. RuleDate2中。  数据库表中的值跟Dropdownlist里的textvalue
    一样。

    当选择Weekly的时候,右边会出现一个Dropdownlist,里边有周一到周五供选择。这就
    是说从这个Planyear的1月1日开始找所有的星期X(x是在Dropdownlist里选择的,也就
    是TBL_PlanDateRules. RuleDate1)。

    当选择Semi-Monthly的时候,右边会出现两个Dropdownlist,前一个 是上半月的日
    期,后一个是下半月的日期。注意下半月最后一项是last,代表本月最后一天。  这就
    要列出,本Planyear中每个月份的这两天。

    当选择Monthly-Date的时候,右边是一个Dropdownlist,里边是日期。这就要列出,本
    Planyear中每个月份的这一天。

    当选择Monthly-Day of Week的时候,右边会出现两个Dropdownlist, 意思是要在每个
    月选择一天,这一天是第几周的周几。 所一第一个Dropdownlist表示的是要选择第几
    周,后一个是表示周几。所以报表就要列出,本Planyear中每个月份的这一天。

    当选择Manual的时候, 计划日期同FactPlanDate
    100  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • happyflystone
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 4

      5

    发表于:2008-08-21 12:58:421楼 得分:0
    好长
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • liangCK
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 2

    发表于:2008-08-21 12:59:122楼 得分:0
    好长..
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • hery2002
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 2

      2

    发表于:2008-08-21 13:04:563楼 得分:0
    好长......
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • wufeng4552
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-21 13:14:304楼 得分:0
    好长
    楼主精简下,说问题的关键~~~
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • ranzj
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-21 14:14:045楼 得分:0
    引用 4 楼 wufeng4552 的回复:
    好长
    楼主精简下,说问题的关键~~~


    归纳一下!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • FreeSarge
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-21 14:29:086楼 得分:0
    现在的客户需求发生了变化,在查询中加入了 {全部}条件,这个是比较头痛的事情,在两个条件都选择All的时候(PlanYearID, EmployerID),需要查询的结果是两个字段笛卡尔积的结果去执行我的存储过程。
    但这样效率实在太慢,而且我的办法也很笨,本人的数据库的基础很差,希望高手能给些指点。

    查询条件 为 ALL的时候, PlanYearID, EmployerID 为全部 的迪卡积极集合 在去执行,我写的存储过程。
    我想要一种高效的方式。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • FreeSarge
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-22 12:57:067楼 得分:0
    顶顶
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • FreeSarge
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-25 12:37:578楼 得分:0
    顶顶
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • yewei2008
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-25 12:51:549楼 得分:0
    等待高手出现。。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • kingdomgps
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-25 13:53:5810楼 得分:0
    如果ALL=原来的两部分之和
    那你可以用union把两个结果联合起来返回给用户
    时间就是两部分执行的时间之和了

    如果不等,我也不知道怎么做了
    等高手出现
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • sxn19811006
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-25 15:12:1911楼 得分:0
    如果不等,我也不知道怎么做了
    等高手出现
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved