首页
新闻
论坛
群组
Blog
文档
下载
读书
Tag
网摘
搜索
.NET
Java
游戏
视频
人才
外包
培训
数据库
书店
程序员
欢迎您:
游客
| 退出
| 登录
注册
帮助
我的帖子
我参与的帖子
我的空间
我的网摘
CSDN
CSDN社区
MS-SQL Server
疑难问题
将帖子提前
放进我的网摘
推荐给好友
我要提问
帖子加分
生成帖子
置顶
推荐(加精)
取消推荐(加精)
锁定帖子
移动帖子
取消引用
结帖去...
管理菜单
页面风格切换
标准风格
老版本论坛
[向
libin_ftsafe
提问]
一个实际的应用问题
加为好友
发送私信
在线聊天
FreeSarge
等级:
可用分等级:
长工
总技术分:
2945
总技术分排名:
7162
结帖率:
90.48%
发表于:
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
回复次数:
11
显示所有回复
显示星级回复
显示楼主回复
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
happyflystone
无枪狙击手
等级:
可用分等级:
中农
总技术分:
77397
总技术分排名:
80
4
5
发表于:
2008-08-21 12:58:42
1
楼 得分:
0
好长
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
liangCK
小梁(宝剑锋从磨砺出,梅花香自苦寒来!)
等级:
可用分等级:
中农
总技术分:
46459
总技术分排名:
175
2
发表于:
2008-08-21 12:59:12
2
楼 得分:
0
好长..
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
hery2002
苦*行*僧
等级:
可用分等级:
贫农
总技术分:
44185
总技术分排名:
189
2
2
发表于:
2008-08-21 13:04:56
3
楼 得分:
0
好长......
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
wufeng4552
水族杰綸
等级:
可用分等级:
贫农
总技术分:
11825
总技术分排名:
1567
发表于:
2008-08-21 13:14:30
4
楼 得分:
0
好长
楼主精简下,说问题的关键~~~
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
ranzj
天鹅,在高过云层的地方,用翅翼亲吻阳光。
等级:
可用分等级:
贫农
总技术分:
15233
总技术分排名:
960
发表于:
2008-08-21 14:14:04
5
楼 得分:
0
引用 4 楼 wufeng4552 的回复:
好长
楼主精简下,说问题的关键~~~
归纳一下!
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
FreeSarge
等级:
可用分等级:
长工
总技术分:
2945
总技术分排名:
7162
发表于:
2008-08-21 14:29:08
6
楼 得分:
0
现在的客户需求发生了变化,在查询中加入了 {全部}条件,这个是比较头痛的事情,在两个条件都选择All的时候(PlanYearID, EmployerID),需要查询的结果是两个字段笛卡尔积的结果去执行我的存储过程。
但这样效率实在太慢,而且我的办法也很笨,本人的数据库的基础很差,希望高手能给些指点。
查询条件 为 ALL的时候, PlanYearID, EmployerID 为全部 的迪卡积极集合 在去执行,我写的存储过程。
我想要一种高效的方式。
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
FreeSarge
等级:
可用分等级:
长工
总技术分:
2945
总技术分排名:
7162
发表于:
2008-08-22 12:57:06
7
楼 得分:
0
顶顶
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
FreeSarge
等级:
可用分等级:
长工
总技术分:
2945
总技术分排名:
7162
发表于:
2008-08-25 12:37:57
8
楼 得分:
0
顶顶
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
yewei2008
正尝试着如何从菜鸟变高手
等级:
可用分等级:
贫农
总技术分:
73
总技术分排名:
107697
发表于:
2008-08-25 12:51:54
9
楼 得分:
0
等待高手出现。。
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
kingdomgps
工作没激情
等级:
可用分等级:
富农
总技术分:
1712
总技术分排名:
12234
发表于:
2008-08-25 13:53:58
10
楼 得分:
0
如果ALL=原来的两部分之和
那你可以用union把两个结果联合起来返回给用户
时间就是两部分执行的时间之和了
如果不等,我也不知道怎么做了
等高手出现
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
sxn19811006
等级:
可用分等级:
贫农
总技术分:
980
总技术分排名:
19827
发表于:
2008-08-25 15:12:19
11
楼 得分:
0
如果不等,我也不知道怎么做了
等高手出现
修改
删除
举报
引用
回复
将帖子提前
放进我的网摘
推荐给好友
我要提问
帖子加分
结帖去...
管理菜单
页面风格切换
标准风格
老版本论坛
网站简介
-
广告服务
-
网站地图
-
帮助
-
联系方式
-
诚聘英才
-
English
-
问题报告
北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
abc推荐给好友