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

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

    模拟数据

    RowID EmployerName
    1 A科技
    2 B科技


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

    模拟数据

    RowID PlanYearName
    1 2007
    2 2008


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

    模拟数据

    RowID EmployerID PlanYearID
    1 1 1
    2 1 2
    3 2 1
    4 2 2

    计划时间表 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


    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


    上边是数据库表结构的简化版
    代码如下


    USE [master]
    GO
    /****** 对象:  Database [Help]    脚本日期: 08/20/2008 16:08:24 ******/
    IF NOT EXISTS (SELECT name FROM sys.databases WHERE name = N'Help')
    BEGIN
    CREATE DATABASE [Help] ON  PRIMARY
    ( NAME = N'Help', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\Help.mdf' , SIZE = 3072KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB )
    LOG ON
    ( NAME = N'Help_log', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\Help_log.ldf' , SIZE = 1024KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)
    END

    GO
    EXEC dbo.sp_dbcmptlevel @dbname=N'Help', @new_cmptlevel=90
    GO
    IF (1 = FULLTEXTSERVICEPROPERTY('IsFullTextInstalled'))
    begin
    EXEC [Help].[dbo].[sp_fulltext_database] @action = 'disable'
    end
    GO
    ALTER DATABASE [Help] SET ANSI_NULL_DEFAULT OFF
    GO
    ALTER DATABASE [Help] SET ANSI_NULLS OFF
    GO
    ALTER DATABASE [Help] SET ANSI_PADDING OFF
    GO
    ALTER DATABASE [Help] SET ANSI_WARNINGS OFF
    GO
    ALTER DATABASE [Help] SET ARITHABORT OFF
    GO
    ALTER DATABASE [Help] SET AUTO_CLOSE OFF
    GO
    ALTER DATABASE [Help] SET AUTO_CREATE_STATISTICS ON
    GO
    ALTER DATABASE [Help] SET AUTO_SHRINK OFF
    GO
    ALTER DATABASE [Help] SET AUTO_UPDATE_STATISTICS ON
    GO
    ALTER DATABASE [Help] SET CURSOR_CLOSE_ON_COMMIT OFF
    GO
    ALTER DATABASE [Help] SET CURSOR_DEFAULT  GLOBAL
    GO
    ALTER DATABASE [Help] SET CONCAT_NULL_YIELDS_NULL OFF
    GO
    ALTER DATABASE [Help] SET NUMERIC_ROUNDABORT OFF
    GO
    ALTER DATABASE [Help] SET QUOTED_IDENTIFIER OFF
    GO
    ALTER DATABASE [Help] SET RECURSIVE_TRIGGERS OFF
    GO
    ALTER DATABASE [Help] SET  ENABLE_BROKER
    GO
    ALTER DATABASE [Help] SET AUTO_UPDATE_STATISTICS_ASYNC OFF
    GO
    ALTER DATABASE [Help] SET DATE_CORRELATION_OPTIMIZATION OFF
    GO
    ALTER DATABASE [Help] SET TRUSTWORTHY OFF
    GO
    ALTER DATABASE [Help] SET ALLOW_SNAPSHOT_ISOLATION OFF
    GO
    ALTER DATABASE [Help] SET PARAMETERIZATION SIMPLE
    GO
    ALTER DATABASE [Help] SET  READ_WRITE
    GO
    ALTER DATABASE [Help] SET RECOVERY FULL
    GO
    ALTER DATABASE [Help] SET  MULTI_USER
    GO
    ALTER DATABASE [Help] SET PAGE_VERIFY CHECKSUM 
    GO
    ALTER DATABASE [Help] SET DB_CHAINING OFF


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

    USE [Help]
    GO
    /****** 对象:  Table [dbo].[Employer]    脚本日期: 08/20/2008 16:08:26 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Employer]') AND type in (N'U'))
    BEGIN
    CREATE TABLE [dbo].[Employer](
    [RowID] [int] IDENTITY(1,1) NOT NULL,
    [EmployerName] [nvarchar](50) NULL,
    CONSTRAINT [PK_Employer] PRIMARY KEY CLUSTERED
    (
    [RowID] ASC
    )WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
    ) ON [PRIMARY]
    END
    GO
    EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'主键' ,@level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'Employer', @level2type=N'COLUMN', @level2name=N'RowID'

    GO
    EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'公司名称' ,@level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'Employer', @level2type=N'COLUMN', @level2name=N'EmployerName'

    GO
    /****** 对象:  Table [dbo].[PlanYear]    脚本日期: 08/20/2008 16:08:26 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[PlanYear]') AND type in (N'U'))
    BEGIN
    CREATE TABLE [dbo].[PlanYear](
    [RowID] [int] IDENTITY(1,1) NOT NULL,
    [PlanYearName] [nvarchar](50) NULL,
    CONSTRAINT [PK_PlanYear] PRIMARY KEY CLUSTERED
    (
    [RowID] ASC
    )WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
    ) ON [PRIMARY]
    END
    GO
    EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'主键' ,@level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'PlanYear', @level2type=N'COLUMN', @level2name=N'RowID'

    GO
    EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'年计划名称' ,@level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'PlanYear', @level2type=N'COLUMN', @level2name=N'PlanYearName'

    GO
    /****** 对象:  Table [dbo].[PlanInfo]    脚本日期: 08/20/2008 16:08:26 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[PlanInfo]') AND type in (N'U'))
    BEGIN
    CREATE TABLE [dbo].[PlanInfo](
    [RowID] [int] IDENTITY(1,1) NOT NULL,
    [EmployerID] [int] NULL,
    [PlanYearID] [int] NULL,
    CONSTRAINT [PK_PlanInfo] PRIMARY KEY CLUSTERED
    (
    [RowID] ASC
    )WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
    ) ON [PRIMARY]
    END
    GO
    EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'主键' ,@level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'PlanInfo', @level2type=N'COLUMN', @level2name=N'RowID'

    GO
    EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'公司编号' ,@level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'PlanInfo', @level2type=N'COLUMN', @level2name=N'EmployerID'

    GO
    EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'计划年份标号' ,@level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'PlanInfo', @level2type=N'COLUMN', @level2name=N'PlanYearID'
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • FreeSarge
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-21 10:31:582楼 得分:0
    GO
    /****** 对象:  Table [dbo].[PlanDates]    脚本日期: 08/20/2008 16:08:26 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[PlanDates]') AND type in (N'U'))
    BEGIN
    CREATE TABLE [dbo].[PlanDates](
    [RowID] [int] IDENTITY(1,1) NOT NULL,
    [PlanInfoID] [int] NULL,
    [FactPlanDate] [datetime] NULL,
    CONSTRAINT [PK_PlanDates] PRIMARY KEY CLUSTERED
    (
    [RowID] ASC
    )WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
    ) ON [PRIMARY]
    END
    GO
    EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'主键' ,@level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'PlanDates', @level2type=N'COLUMN', @level2name=N'RowID'

    GO
    EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'计划编号' ,@level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'PlanDates', @level2type=N'COLUMN', @level2name=N'PlanInfoID'

    GO
    EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'计划实际发生日期' ,@level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'PlanDates', @level2type=N'COLUMN', @level2name=N'FactPlanDate'

    GO
    /****** 对象:  Table [dbo].[PlanDateRules]    脚本日期: 08/20/2008 16:08:26 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[PlanDateRules]') AND type in (N'U'))
    BEGIN
    CREATE TABLE [dbo].[PlanDateRules](
    [RowID] [int] IDENTITY(1,1) NOT NULL,
    [PlanInfoID] [int] NULL,
    [Rule] [nvarchar](50) NULL,
    [RuleDate1] [nvarchar](50) NULL,
    [RuleDate2] [nvarchar](50) NULL,
    CONSTRAINT [PK_PlanDateRules] PRIMARY KEY CLUSTERED
    (
    [RowID] ASC
    )WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
    ) ON [PRIMARY]
    END
    GO
    EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'主键' ,@level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'PlanDateRules', @level2type=N'COLUMN', @level2name=N'RowID'

    GO
    EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'计划编号' ,@level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'PlanDateRules', @level2type=N'COLUMN', @level2name=N'PlanInfoID'

    GO
    EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'规则类型

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



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



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



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



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



    当选择Manual的时候,Targeted列跟Actual列一模一样就可以了。
    ' ,@level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'PlanDateRules', @level2type=N'COLUMN', @level2name=N'Rule'

    GO
    EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'规则时间' ,@level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'PlanDateRules', @level2type=N'COLUMN', @level2name=N'RuleDate1'

    GO
    EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'规则时间' ,@level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'PlanDateRules', @level2type=N'COLUMN', @level2name=N'RuleDate2'
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • FreeSarge
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-21 10:32:133楼 得分:0
    GO
    USE [Help]
    GO
    USE [Help]
    GO
    USE [Help]
    GO
    IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N'[dbo].[FK_PlanInfo_Employer]') AND parent_object_id = OBJECT_ID(N'[dbo].[PlanInfo]'))
    ALTER TABLE [dbo].[PlanInfo]  WITH CHECK ADD  CONSTRAINT [FK_PlanInfo_Employer] FOREIGN KEY([EmployerID])
    REFERENCES [dbo].[Employer] ([RowID])
    GO
    IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N'[dbo].[FK_PlanInfo_PlanYear]') AND parent_object_id = OBJECT_ID(N'[dbo].[PlanInfo]'))
    ALTER TABLE [dbo].[PlanInfo]  WITH CHECK ADD  CONSTRAINT [FK_PlanInfo_PlanYear] FOREIGN KEY([PlanYearID])
    REFERENCES [dbo].[PlanYear] ([RowID])
    GO
    IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N'[dbo].[FK_PlanDates_PlanInfo]') AND parent_object_id = OBJECT_ID(N'[dbo].[PlanDates]'))
    ALTER TABLE [dbo].[PlanDates]  WITH CHECK ADD  CONSTRAINT [FK_TBL_PlanDates_PlanInfo] FOREIGN KEY([PlanInfoID])
    REFERENCES [dbo].[PlanInfo] ([RowID])
    GO
    IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N'[dbo].[FK_PlanDateRules_PlanInfo]') AND parent_object_id = OBJECT_ID(N'[dbo].[PlanDateRules]'))
    ALTER TABLE [dbo].[PlanDateRules]  WITH CHECK ADD  CONSTRAINT [FK_TBL_PlanDateRules_PlanInfo] FOREIGN KEY([PlanInfoID])
    REFERENCES [dbo].[PlanInfo] ([RowID])
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • maco_wang
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-21 10:34:534楼 得分:0
    友情up
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • FreeSarge
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-21 10:35:415楼 得分:0
    INSERT [Employer] ([EmployerName]) VALUES ( 'A科技')
    INSERT [Employer] ([EmployerName]) VALUES ( 'B科技')
    INSERT [Employer] ([EmployerName]) VALUES ( 'C科技')
    INSERT [Employer] ([EmployerName]) VALUES ( 'D科技')
    INSERT [Employer] ([EmployerName]) VALUES ( 'E科技')

    INSERT [PlanYear] ([PlanYearName]) VALUES ( '2008')
    INSERT [PlanYear] ([PlanYearName]) VALUES ( '2009')
    INSERT [PlanYear] ([PlanYearName]) VALUES ( '2010')
    INSERT [PlanYear] ([PlanYearName]) VALUES ( '2011')
    INSERT [PlanYear] ([PlanYearName]) VALUES ( '2012')

    INSERT [PlanInfo] ([EmployerID],[PlanYearID]) VALUES ( 1,1)
    INSERT [PlanInfo] ([EmployerID],[PlanYearID]) VALUES ( 1,2)
    INSERT [PlanInfo] ([EmployerID],[PlanYearID]) VALUES ( 2,1)
    INSERT [PlanInfo] ([EmployerID],[PlanYearID]) VALUES ( 2,2)
    INSERT [PlanInfo] ([EmployerID],[PlanYearID]) VALUES ( 3,1)
    INSERT [PlanInfo] ([EmployerID],[PlanYearID]) VALUES ( 3,2)
    INSERT [PlanInfo] ([EmployerID],[PlanYearID]) VALUES ( 4,1)
    INSERT [PlanInfo] ([EmployerID],[PlanYearID]) VALUES ( 4,2)
    INSERT [PlanInfo] ([EmployerID],[PlanYearID]) VALUES (5,1)
    INSERT [PlanInfo] ([EmployerID],[PlanYearID]) VALUES ( 5,2)

    INSERT [PlanDateRules] ([PlanInfoID],[Rule],[RuleDate1]) VALUES ( 1,'Weekly','2008-1-1')
    INSERT [PlanDateRules] ([PlanInfoID],[Rule],[RuleDate1],[RuleDate2]) VALUES ( 3,'Semi-Monthly','2008-1-5','2008-1-20')
    INSERT [PlanDateRules] ([PlanInfoID],[Rule],[RuleDate1]) VALUES ( 5,'Monthly-Date','2008-1-15')
    INSERT [PlanDateRules] ([PlanInfoID],[Rule],[RuleDate1],[RuleDate2]) VALUES ( 7,'Monthly-Day of Week','3','2')
    INSERT [PlanDateRules] ([PlanInfoID],[Rule]) VALUES ( 9,'Manual')


    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • FreeSarge
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-21 10:36:046楼 得分:0
    INSERT [PlanDates] ( [PlanInfoID],[FactPlanDate]) VALUES ( 1,'2008-1-3 0:00:00')
    INSERT [PlanDates] ( [PlanInfoID],[FactPlanDate]) VALUES ( 1,'2008-1-10 0:00:00')
    INSERT [PlanDates] ( [PlanInfoID],[FactPlanDate]) VALUES ( 1,'2008-1-17 0:00:00')
    INSERT [PlanDates] ( [PlanInfoID],[FactPlanDate]) VALUES ( 1,'2008-1-24 0:00:00')
    INSERT [PlanDates] ( [PlanInfoID],[FactPlanDate]) VALUES ( 1,'2008-1-31 0:00:00')
    INSERT [PlanDates] ( [PlanInfoID],[FactPlanDate]) VALUES ( 1,'2008-2-7 0:00:00')
    INSERT [PlanDates] ( [PlanInfoID],[FactPlanDate]) VALUES ( 1,'2008-2-14 0:00:00')
    INSERT [PlanDates] ( [PlanInfoID],[FactPlanDate]) VALUES ( 1,'2008-2-21 0:00:00')
    INSERT [PlanDates] ( [PlanInfoID],[FactPlanDate]) VALUES ( 1,'2008-2-28 0:00:00')
    INSERT [PlanDates] ( [PlanInfoID],[FactPlanDate]) VALUES ( 1,'2008-3-6 0:00:00')
    INSERT [PlanDates] ( [PlanInfoID],[FactPlanDate]) VALUES ( 1,'2008-3-13 0:00:00')
    INSERT [PlanDates] ( [PlanInfoID],[FactPlanDate]) VALUES ( 1,'2008-3-20 0:00:00')
    INSERT [PlanDates] ( [PlanInfoID],[FactPlanDate]) VALUES ( 1,'2008-3-27 0:00:00')
    INSERT [PlanDates] ( [PlanInfoID],[FactPlanDate]) VALUES ( 1,'2008-4-3 0:00:00')
    INSERT [PlanDates] ( [PlanInfoID],[FactPlanDate]) VALUES ( 1,'2008-4-10 0:00:00')
    INSERT [PlanDates] ( [PlanInfoID],[FactPlanDate]) VALUES ( 1,'2008-4-17 0:00:00')
    INSERT [PlanDates] ( [PlanInfoID],[FactPlanDate]) VALUES ( 1,'2008-4-24 0:00:00')
    INSERT [PlanDates] ( [PlanInfoID],[FactPlanDate]) VALUES ( 1,'2008-5-1 0:00:00')
    INSERT [PlanDates] ( [PlanInfoID],[FactPlanDate]) VALUES ( 1,'2008-5-8 0:00:00')
    INSERT [PlanDates] ( [PlanInfoID],[FactPlanDate]) VALUES ( 1,'2008-5-15 0:00:00')
    INSERT [PlanDates] ( [PlanInfoID],[FactPlanDate]) VALUES ( 1,'2008-5-22 0:00:00')
    INSERT [PlanDates] ( [PlanInfoID],[FactPlanDate]) VALUES ( 1,'2008-5-29 0:00:00')
    INSERT [PlanDates] ( [PlanInfoID],[FactPlanDate]) VALUES ( 1,'2008-6-5 0:00:00')
    INSERT [PlanDates] ( [PlanInfoID],[FactPlanDate]) VALUES ( 1,'2008-6-12 0:00:00')
    INSERT [PlanDates] ( [PlanInfoID],[FactPlanDate]) VALUES ( 1,'2008-6-19 0:00:00')
    INSERT [PlanDates] ( [PlanInfoID],[FactPlanDate]) VALUES ( 1,'2008-6-26 0:00:00')
    INSERT [PlanDates] ( [PlanInfoID],[FactPlanDate]) VALUES ( 1,'2008-7-3 0:00:00')
    INSERT [PlanDates] ( [PlanInfoID],[FactPlanDate]) VALUES ( 1,'2008-7-10 0:00:00')
    INSERT [PlanDates] ( [PlanInfoID],[FactPlanDate]) VALUES ( 1,'2008-7-17 0:00:00')
    INSERT [PlanDates] ( [PlanInfoID],[FactPlanDate]) VALUES ( 1,'2008-7-24 0:00:00')
    INSERT [PlanDates] ( [PlanInfoID],[FactPlanDate]) VALUES ( 1,'2008-7-31 0:00:00')
    INSERT [PlanDates] ( [PlanInfoID],[FactPlanDate]) VALUES ( 1,'2008-8-7 0:00:00')
    INSERT [PlanDates] ( [PlanInfoID],[FactPlanDate]) VALUES ( 1,'2008-8-14 0:00:00')
    INSERT [PlanDates] ( [PlanInfoID],[FactPlanDate]) VALUES ( 1,'2008-8-21 0:00:00')
    INSERT [PlanDates] ( [PlanInfoID],[FactPlanDate]) VALUES ( 1,'2008-8-28 0:00:00')
    INSERT [PlanDates] ( [PlanInfoID],[FactPlanDate]) VALUES ( 1,'2008-9-4 0:00:00')
    INSERT [PlanDates] ( [PlanInfoID],[FactPlanDate]) VALUES ( 1,'2008-9-11 0:00:00')
    INSERT [PlanDates] ( [PlanInfoID],[FactPlanDate]) VALUES ( 1,'2008-9-18 0:00:00')
    INSERT [PlanDates] ( [PlanInfoID],[FactPlanDate]) VALUES ( 1,'2008-9-25 0:00:00')
    INSERT [PlanDates] ( [PlanInfoID],[FactPlanDate]) VALUES ( 1,'2008-10-2 0:00:00')
    INSERT [PlanDates] ( [PlanInfoID],[FactPlanDate]) VALUES ( 1,'2008-10-9 0:00:00')
    INSERT [PlanDates] ( [PlanInfoID],[FactPlanDate]) VALUES ( 1,'2008-10-16 0:00:00')
    INSERT [PlanDates] ( [PlanInfoID],[FactPlanDate]) VALUES ( 1,'2008-10-23 0:00:00')
    INSERT [PlanDates] ( [PlanInfoID],[FactPlanDate]) VALUES ( 1,'2008-10-30 0:00:00')
    INSERT [PlanDates] ( [PlanInfoID],[FactPlanDate]) VALUES ( 1,'2008-11-6 0:00:00')
    INSERT [PlanDates] ( [PlanInfoID],[FactPlanDate]) VALUES ( 1,'2008-11-13 0:00:00')
    INSERT [PlanDates] ( [PlanInfoID],[FactPlanDate]) VALUES ( 1,'2008-11-20 0:00:00')
    INSERT [PlanDates] ( [PlanInfoID],[FactPlanDate]) VALUES ( 1,'2008-11-27 0:00:00')
    INSERT [PlanDates] ( [PlanInfoID],[FactPlanDate]) VALUES ( 1,'2008-12-4 0:00:00')
    INSERT [PlanDates] ( [PlanInfoID],[FactPlanDate]) VALUES ( 1,'2008-12-11 0:00:00')
    INSERT [PlanDates] ( [PlanInfoID],[FactPlanDate]) VALUES ( 1,'2008-12-18 0:00:00')
    INSERT [PlanDates] ( [PlanInfoID],[FactPlanDate]) VALUES ( 1,'2008-12-25 0:00:00')
    INSERT [PlanDates] ( [PlanInfoID],[FactPlanDate]) VALUES ( 3,'2008-1-5 0:00:00')
    INSERT [PlanDates] ( [PlanInfoID],[FactPlanDate]) VALUES ( 3,'2008-1-20 0:00:00')
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • FreeSarge
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-21 10:37:047楼 得分:0
    INSERT [PlanDates] ( [PlanInfoID],[FactPlanDate]) VALUES ( 3,'2008-2-5 0:00:00')
    INSERT [PlanDates] ( [PlanInfoID],[FactPlanDate]) VALUES ( 3,'2008-2-20 0:00:00')
    INSERT [PlanDates] ( [PlanInfoID],[FactPlanDate]) VALUES ( 3,'2008-3-5 0:00:00')
    INSERT [PlanDates] ( [PlanInfoID],[FactPlanDate]) VALUES ( 3,'2008-3-20 0:00:00')
    INSERT [PlanDates] ( [PlanInfoID],[FactPlanDate]) VALUES ( 3,'2008-4-5 0:00:00')
    INSERT [PlanDates] ( [PlanInfoID],[FactPlanDate]) VALUES ( 3,'2008-4-20 0:00:00')
    INSERT [PlanDates] ( [PlanInfoID],[FactPlanDate]) VALUES ( 3,'2008-5-5 0:00:00')
    INSERT [PlanDates] ( [PlanInfoID],[FactPlanDate]) VALUES ( 3,'2008-5-20 0:00:00')
    INSERT [PlanDates] ( [PlanInfoID],[FactPlanDate]) VALUES ( 3,'2008-6-5 0:00:00')
    INSERT [PlanDates] ( [PlanInfoID],[FactPlanDate]) VALUES ( 3,'2008-6-20 0:00:00')
    INSERT [PlanDates] ( [PlanInfoID],[FactPlanDate]) VALUES ( 3,'2008-7-5 0:00:00')
    INSERT [PlanDates] ( [PlanInfoID],[FactPlanDate]) VALUES ( 3,'2008-7-20 0:00:00')
    INSERT [PlanDates] ( [PlanInfoID],[FactPlanDate]) VALUES ( 3,'2008-8-5 0:00:00')
    INSERT [PlanDates] ( [PlanInfoID],[FactPlanDate]) VALUES ( 3,'2008-8-20 0:00:00')
    INSERT [PlanDates] ( [PlanInfoID],[FactPlanDate]) VALUES ( 3,'2008-9-5 0:00:00')
    INSERT [PlanDates] ( [PlanInfoID],[FactPlanDate]) VALUES ( 3,'2008-9-20 0:00:00')
    INSERT [PlanDates] ( [PlanInfoID],[FactPlanDate]) VALUES ( 3,'2008-10-5 0:00:00')
    INSERT [PlanDates] ( [PlanInfoID],[FactPlanDate]) VALUES ( 3,'2008-10-20 0:00:00')
    INSERT [PlanDates] ( [PlanInfoID],[FactPlanDate]) VALUES ( 3,'2008-11-5 0:00:00')
    INSERT [PlanDates] ( [PlanInfoID],[FactPlanDate]) VALUES ( 3,'2008-11-20 0:00:00')
    INSERT [PlanDates] ( [PlanInfoID],[FactPlanDate]) VALUES ( 3,'2008-12-5 0:00:00')
    INSERT [PlanDates] ( [PlanInfoID],[FactPlanDate]) VALUES ( 3,'2008-12-20 0:00:00')
    INSERT [PlanDates] ( [PlanInfoID],[FactPlanDate]) VALUES ( 5,'2008-1-5 0:00:00')
    INSERT [PlanDates] ( [PlanInfoID],[FactPlanDate]) VALUES ( 5,'2008-2-5 0:00:00')
    INSERT [PlanDates] ( [PlanInfoID],[FactPlanDate]) VALUES ( 5,'2008-3-5 0:00:00')
    INSERT [PlanDates] ( [PlanInfoID],[FactPlanDate]) VALUES ( 5,'2008-4-5 0:00:00')
    INSERT [PlanDates] ( [PlanInfoID],[FactPlanDate]) VALUES ( 5,'2008-5-5 0:00:00')
    INSERT [PlanDates] ( [PlanInfoID],[FactPlanDate]) VALUES ( 5,'2008-6-5 0:00:00')
    INSERT [PlanDates] ( [PlanInfoID],[FactPlanDate]) VALUES ( 5,'2008-7-5 0:00:00')
    INSERT [PlanDates] ( [PlanInfoID],[FactPlanDate]) VALUES ( 5,'2008-8-5 0:00:00')
    INSERT [PlanDates] ( [PlanInfoID],[FactPlanDate]) VALUES ( 5,'2008-9-5 0:00:00')
    INSERT [PlanDates] ( [PlanInfoID],[FactPlanDate]) VALUES ( 5,'2008-10-5 0:00:00')
    INSERT [PlanDates] ( [PlanInfoID],[FactPlanDate]) VALUES ( 5,'2008-11-5 0:00:00')
    INSERT [PlanDates] ( [PlanInfoID],[FactPlanDate]) VALUES ( 5,'2008-12-5 0:00:00')
    INSERT [PlanDates] ( [PlanInfoID],[FactPlanDate]) VALUES ( 7,'2008-1-22 0:00:00')
    INSERT [PlanDates] ( [PlanInfoID],[FactPlanDate]) VALUES ( 7,'2008-2-19 0:00:00')
    INSERT [PlanDates] ( [PlanInfoID],[FactPlanDate]) VALUES ( 7,'2008-3-18 0:00:00')
    INSERT [PlanDates] ( [PlanInfoID],[FactPlanDate]) VALUES ( 7,'2008-4-22 0:00:00')
    INSERT [PlanDates] ( [PlanInfoID],[FactPlanDate]) VALUES ( 7,'2008-5-20 0:00:00')
    INSERT [PlanDates] ( [PlanInfoID],[FactPlanDate]) VALUES ( 7,'2008-6-17 0:00:00')
    INSERT [PlanDates] ( [PlanInfoID],[FactPlanDate]) VALUES ( 7,'2008-7-22 0:00:00')
    INSERT [PlanDates] ( [PlanInfoID],[FactPlanDate]) VALUES ( 7,'2008-8-19 0:00:00')
    INSERT [PlanDates] ( [PlanInfoID],[FactPlanDate]) VALUES ( 7,'2008-9-16 0:00:00')
    INSERT [PlanDates] ( [PlanInfoID],[FactPlanDate]) VALUES ( 7,'2008-10-21 0:00:00')
    INSERT [PlanDates] ( [PlanInfoID],[FactPlanDate]) VALUES ( 7,'2008-11-18 0:00:00')
    INSERT [PlanDates] ( [PlanInfoID],[FactPlanDate]) VALUES ( 7,'2008-12-16 0:00:00')
    INSERT [PlanDates] ( [PlanInfoID],[FactPlanDate]) VALUES ( 9,'2008-1-14 0:00:00')
    INSERT [PlanDates] ( [PlanInfoID],[FactPlanDate]) VALUES ( 9,'2008-2-11 0:00:00')
    INSERT [PlanDates] ( [PlanInfoID],[FactPlanDate]) VALUES ( 9,'2008-3-26 0:00:00')
    INSERT [PlanDates] ( [PlanInfoID],[FactPlanDate]) VALUES ( 9,'2008-5-4 0:00:00')
    INSERT [PlanDates] ( [PlanInfoID],[FactPlanDate]) VALUES ( 9,'2008-7-23 0:00:00')
    INSERT [PlanDates] ([PlanInfoID],[FactPlanDate]) VALUES ( 9,'2008-8-4 0:00:00')
    INSERT [PlanDates] ([PlanInfoID],[FactPlanDate]) VALUES ( 9,'2008-9-19 0:00:00')
    INSERT [PlanDates] ([PlanInfoID],[FactPlanDate]) VALUES ( 9,'2008-12-13 0:00:00')
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • maco_wang
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-21 10:39:348楼 得分:0
    up
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • only_endure
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-21 10:39:459楼 得分:0
    学习科学文化知识.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • FreeSarge
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-21 10:40:0410楼 得分:0
    USE [Help]
    GO
    /****** 对象:  UserDefinedFunction [dbo].[fn_ReturnDate]    脚本日期: 08/21/2008 10:17:30 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO


    -- =============================================
    -- Author: <Joe>
    -- Create date: <2008-8-11>
    -- Description: <>
    -- =============================================
    CREATE FUNCTION [dbo].[fn_ReturnDate]
    (
    @PlanYearName varchar(50),
    @Rule varchar(50),
    @RuleDate1 varchar(255),
    @RuleDate2 varchar(255)
    )
    RETURNS @Tmp TABLE(FactPlanDate datetime,row_num int)
    AS
    BEGIN
    IF @Rule = 'Weekly'
    BEGIN
    INSERT @Tmp
    SELECT * FROM [dbo].[ft_Weekly] (@PlanYearName,@RuleDate1)
    END

    IF @Rule = 'Semi-Monthly'
    BEGIN
    INSERT @Tmp
    SELECT * FROM [dbo].[ft_Semi_Monthly] (@PlanYearName,@RuleDate1,@RuleDate2)
    END

    IF @Rule = 'Monthly-Date'
    BEGIN
    INSERT @Tmp
    SELECT * FROM [dbo].[ft_Monthly_Date] (@PlanYearName,@RuleDate1)
    END

    IF @Rule = 'Monthly-Day of Week'
    BEGIN
    INSERT @Tmp
    SELECT * FROM [dbo].[ft_Monthly_Day_of_Week] (@PlanYearName,@RuleDate1,@RuleDate2)
    END
    RETURN
    END

    --SELECT * FROM
    --dbo.fn_ReturnDate ('2008','Weekly','2008-1-1','')


    GO
    /****** 对象:  UserDefinedFunction [dbo].[ft_Monthly_Date]    脚本日期: 08/21/2008 10:17:30 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO


    -- =============================================
    -- Author: <Joe>
    -- Create date: <2008-8-11>
    -- Description: <Monthly_Date>
    -- =============================================
    CREATE FUNCTION [dbo].[ft_Monthly_Date]

    (
    @PlanYearName varchar(50),
    @RuleDate1 varchar(255)
    )
    RETURNS @Tmpft_Semi_Monthly TABLE(FactPlanDate datetime,row_num int IDENTITY (1,1))
    AS
    BEGIN
    DECLARE @tmpdate1 datetime
    DECLARE @tmpdate2 datetime
    SET @tmpdate1 = CONVERT(datetime,@RuleDate1)
    WHILE (year(@tmpdate1) = @PlanYearName)
    BEGIN
    INSERT INTO @Tmpft_Semi_Monthly
    (
    FactPlanDate
    )
    VALUES
    (
    @tmpdate1
    )

    SET @tmpdate1 =  DATEADD(month,1,@tmpdate1)
    END
    return
    END

    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • FreeSarge
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-21 10:40:3611楼 得分:0
    GO
    /****** 对象:  UserDefinedFunction [dbo].[ft_Monthly_Day_of_Week]    脚本日期: 08/21/2008 10:17:31 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO


    -- =============================================
    -- Author: <Joe>
    -- Create date: <2008-8-11>
    -- Description: <Monthly-Day of Week>
    -- =============================================
    CREATE FUNCTION [dbo].[ft_Monthly_Day_of_Week]
    (
    @PlanYearName varchar(50),
    @RuleDate1 varchar(255),
    @RuleDate2 varchar(255)
    )
    RETURNS @Tmpft_Weekly TABLE(FactPlanDate datetime,row_num int IDENTITY (1,1))
    AS
    BEGIN
    DECLARE @tmpdate datetime
    SET @tmpdate = CONVERT(char(5),@PlanYearName,120)+ '-1-1 '

    DECLARE @tmpdate1 datetime
    WHILE (year(@tmpdate) = @PlanYearName)
    BEGIN
    SET @tmpdate1 = DATEADD(day,@RuleDate2 -1,(DATEADD(wk,@RuleDate1-1, DATEADD(wk,DATEDIFF(wk,0,
    dateadd(dd,6-datepart(day,@tmpdate),@tmpdate)), 0))))

    INSERT INTO @Tmpft_Weekly
    (
    FactPlanDate
    )
    VALUES
    (
    @tmpdate1
    )
    SET @tmpdate =  DATEADD(month,1,@tmpdate)
    END

    return
    END

    --SELECT * FROM  dbo.ft_Monthly_Day_of_Week ('2008','3','4')

    GO
    /****** 对象:  UserDefinedFunction [dbo].[ft_Semi_Monthly]    脚本日期: 08/21/2008 10:17:31 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO


    -- =============================================
    -- Author: <Joe>
    -- Create date: <2008-8-11>
    -- Description: <Semi-Monthly>
    -- =============================================
    CREATE FUNCTION [dbo].[ft_Semi_Monthly]
    (
    @PlanYearName varchar(50),
    @RuleDate1 varchar(255),
    @RuleDate2 varchar(255)
    )
    RETURNS @Tmpft_Semi_Monthly TABLE(FactPlanDate datetime,row_num int IDENTITY (1,1))
    AS
    BEGIN
    DECLARE @tmpdate1 datetime
    DECLARE @tmpdate2 datetime
    SET @tmpdate1 = CONVERT(datetime,@RuleDate1)
    SET @tmpdate2 = CONVERT(datetime,@RuleDate2)
    WHILE (year(@tmpdate1) = @PlanYearName)
    BEGIN

    INSERT INTO @Tmpft_Semi_Monthly
    (
    FactPlanDate
    )
    VALUES
    (
    @tmpdate1
    )

    INSERT INTO @Tmpft_Semi_Monthly
    (
    FactPlanDate
    )
    VALUES
    (
    @tmpdate2
    )

    SET @tmpdate1 =  DATEADD(month,1,@tmpdate1)
    SET @tmpdate2 =  DATEADD(month,1,@tmpdate2)
    END
    return
    END


    GO
    /****** 对象:  UserDefinedFunction [dbo].[ft_Weekly]    脚本日期: 08/21/2008 10:17:32 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO

    -- =============================================
    -- Author: <Joe>
    -- Create date: <2008-8-11>
    -- Description: <Weekly>
    -- =============================================
    CREATE FUNCTION [dbo].[ft_Weekly]
    (
    @PlanYearName varchar(50),
    @RuleDate1 varchar(255)
    )
    RETURNS @Tmpft_Weekly TABLE(FactPlanDate datetime,row_num int IDENTITY (1,1))
    AS
    BEGIN
    DECLARE @tmpdate datetime
    SET @tmpdate = CONVERT(datetime,@RuleDate1)

    WHILE (year(@tmpdate) = @PlanYearName)
    BEGIN

    INSERT INTO @Tmpft_Weekly
    (
    FactPlanDate
    )
    VALUES
    (
    @tmpdate
    )
    SET @tmpdate =  DATEADD(day,7,@tmpdate)
    END
    return
    END


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

    -- =============================================
    -- Author: Joe
    -- Create date: 2008-8-4
    -- Description: Show_PlanDate
    -- =============================================
    CREATE PROCEDURE [dbo].[sp_Show_Employer_PlanDate]
    (
    @PlanYearID nvarchar(20),
    @EmployerID nvarchar(20)
    )

    AS
    BEGIN

    DECLARE @PlanYearName varchar(100)
    SELECT @PlanYearName = PlanYearName FROM PlanYear WHERE RowID = 1
    DECLARE @RULE varchar(255)
    DECLARE @RuleDate1 varchar(255)
    DECLARE @RuleDate2 varchar(255)
    SELECT TOP 1 @RULE = [RULE] , @RuleDate1 =RuleDate1,@RuleDate2 =RuleDate2 FROM PlanDateRules
    WHERE PlanInfoID =( SELECT RowID FROM PlanInfo
    WHERE PlanYearID =@PlanYearID AND EmployerID =@EmployerID)
    IF @RULE <> 'Manual'
    BEGIN
    DECLARE @tempTableB TABLE(FactPlanDate datetime,row_num int)
    INSERT @tempTableB SELECT * FROM [dbo].[fn_ReturnDate](year(@PlanYearName),@RULE,@RuleDate1,@RuleDate2)

    SELECT EmployerName,PlanYearName,FactPlanDate,Actual FROM (SELECT  ROW_NUMBER()Over(ORDER BY PlanDates.FactPlanDate) as  row_num, Employer.EmployerName AS EmployerName ,
    PlanYear.PlanYearName AS PlanYearName ,PlanDates.FactPlanDate AS Actual  FROM PlanInfo
    INNER JOIN PlanDates ON PlanDates.PlanInfoID = PlanInfo.RowID
    INNER JOIN Employer ON Employer.RowID =PlanInfo.EmployerID
    INNER JOIN PlanYear ON PlanYear.RowID = PlanInfo.PlanYearID
    WHERE PlanInfo.PlanYearID = @PlanYearID AND PlanInfo.EmployerID = @EmployerID
    AND YEAR(PlanDates.FactPlanDate) =@PlanYearName) AS tempTableA
    INNER JOIN  (SELECT* FROM  @tempTableB) AS tempTableB
    ON tempTableB.row_num = tempTableA.row_num
    END
    ELSE
    BEGIN
    SELECT EmployerName,PlanYearName,Actual AS  FactPlanDate,Actual FROM (SELECT  ROW_NUMBER()Over(ORDER BY PlanDates.FactPlanDate) as  row_num, Employer.EmployerName AS EmployerName ,
    PlanYear.PlanYearName  AS PlanYearName ,PlanDates.FactPlanDate AS Actual  FROM PlanInfo
    INNER JOIN PlanDates ON PlanDates.PlanInfoID = PlanInfo.RowID
    INNER JOIN Employer ON Employer.RowID =PlanInfo.EmployerID

    INNER JOIN PlanYear ON PlanYear.RowID = PlanInfo.PlanYearID
    WHERE PlanInfo.PlanYearID = @PlanYearID AND PlanInfo.EmployerID = @EmployerID
    AND YEAR(PlanDates.FactPlanDate) =@PlanYearName) AS tempTableA
    END
    --                                                 
    END
    --sp_Show_Employer_PlanDate 1,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),需要查询的结果是两个字段笛卡尔积的结果去执行我的存储过程。
    但这样效率实在太慢,而且我的办法也很笨,本人的数据库的基础很差,希望高手能给些指点。

    谢谢大家
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • only_endure
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-21 10:41:1113楼 得分:0
    再学习...
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • happyflystone
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 4

      5

    发表于:2008-08-21 10:41:3914楼 得分:0
    晕,你想问啥 ?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • FreeSarge
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-21 11:01:5015楼 得分:0
    查询条件 为 ALL的时候, PlanYearID, EmployerID 为全部 的迪卡积极集合 在去执行,我写的存储过程。
    我想要一种高效的方式。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • FreeSarge
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-21 11:02:4216楼 得分:0
    帖子长 主要是测试数据代码很长, 直接执行就可以。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • FreeSarge
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-25 14:04:2717楼 得分:0
    顶顶
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • linguojin
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-25 15:20:5618楼 得分:0
    杀了我吧。。。。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • FreeSarge
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-25 16:03:5519楼 得分:0
    呵呵。我知道错了,其实发这个长的帖子,本身就是罪。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • FreeSarge
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-25 16:05:3420楼 得分:0
    你比我还快,你真行~~~~~
    修改 删除 举报 引用 回复