Source表:记录公司每一笔订单的信息
clientsum表:记录公司客户的信息
inspectors表:记录公司职员信息
要求:写一个触发器,当Source表发生insert,update或delete操作时更新inspectors.[1月金额]列
更新规则如下:
1.当inspectors.归属=公司 且 状态=cs 时,通过inspectors.中文名或inspectors.英文名在clientsum.日常处理中找到相同项,clientsum表中对应项目查找对应的所有客户、客户分部、CS处理权重 三个信息备用。
在source表中找到"月份"=1,
1.1对于"cs处理权重"=3的"客户"和"客户分部"对应的 sum(金额_美金)*0.5%*60%
1.2对于"cs处理权重"=2的"客户"和"客户分部"对应的 sum(金额_美金)*0.5%
1.3对于"cs处理权重"=1的"客户"和"客户分部"对应的 sum(金额_美金)*0.5%*120%
inspectors.[1月金额]的值等于1.1,1.2,1.3三项之和
2.当inspectors.归属=公司 且 状态=sales 时,通过inspectors.中文名或inspectors.英文名在clientsum.责任业务员中找到相同项,clientsum表中对应项目查找对应的所有客户、客户分部 两个信息备用。
在source表中找到"月份"=1,
2.1Source中对应客户名称、客户分部匹配项对应的 160=<金额_美金/Manday<198的,inspectors.[1月金额]累加30*Manday
2.2Source中对应客户名称、客户分部匹配项对应的 258>金额_美金/Manday>=198的,inspectors.[1月金额]累加50*Manday
2.3Source中对应客户名称、客户分部匹配项对应的 金额_美金/Manday>=258的,inspectors.[1月金额]累加80*Manday
inspectors.[1月金额]的值等于2.1,2.2,2.3三项之和
3.当inspectors.归属=公司 且 状态=manager时。
在source表中找到"月份"=1,
3.1 按照第二步计算的所有sales收入的20%
3.2 1月总的金额_美金 合计收入的0.8%
inspectors.[1月金额]的值等于3.1,3.2两项之和
生成样式数据库代码如下:
USE [AC26_fortest]
GO
/****** Object: Table [dbo].[Source] Script Date: 02/23/2015 23:19:09 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Source](
[ID] [int] IDENTITY(1,1) NOT NULL,
[月份] [tinyint] NULL,
[客户名称] [nvarchar](255) NULL,
[客户分部] [nvarchar](255) NULL,
[Manday] [float] NULL,
[金额_美金] [float] NULL,
[业务] [nvarchar](255) NULL
) ON [PRIMARY]
GO
SET IDENTITY_INSERT [dbo].[Source] ON
INSERT [dbo].[Source] ([ID], [月份], [客户名称], [客户分部], [Manday], [金额_美金], [业务]) VALUES (1, 1, N'A', N'A1', 1, 168, N'sales1')
INSERT [dbo].[Source] ([ID], [月份], [客户名称], [客户分部], [Manday], [金额_美金], [业务]) VALUES (2, 1, N'A', N'A1', 2, 366, N'sales1')
INSERT [dbo].[Source] ([ID], [月份], [客户名称], [客户分部], [Manday], [金额_美金], [业务]) VALUES (3, 1, N'A', N'A2', 1, 300, N'sales1')
INSERT [dbo].[Source] ([ID], [月份], [客户名称], [客户分部], [Manday], [金额_美金], [业务]) VALUES (4, 1, N'A', N'A2', 1, 500, N'sales1')
INSERT [dbo].[Source] ([ID], [月份], [客户名称], [客户分部], [Manday], [金额_美金], [业务]) VALUES (5, 1, N'B', N'B1', 1, 400, N'sales1')
INSERT [dbo].[Source] ([ID], [月份], [客户名称], [客户分部], [Manday], [金额_美金], [业务]) VALUES (6, 1, N'B', N'B3', 1, 100, N'sales1')
INSERT [dbo].[Source] ([ID], [月份], [客户名称], [客户分部], [Manday], [金额_美金], [业务]) VALUES (7, 1, N'C', N'C1', 1, 198, N'sales1')
INSERT [dbo].[Source] ([ID], [月份], [客户名称], [客户分部], [Manday], [金额_美金], [业务]) VALUES (8, 1, N'C', N'C1', 1, 100, N'sales1')
INSERT [dbo].[Source] ([ID], [月份], [客户名称], [客户分部], [Manday], [金额_美金], [业务]) VALUES (9, 1, N'A', N'A2', 1, 0, N'manager1')
INSERT [dbo].[Source] ([ID], [月份], [客户名称], [客户分部], [Manday], [金额_美金], [业务]) VALUES (10, 1, N'A', N'A1', 1, 198, N'manager1')
INSERT [dbo].[Source] ([ID], [月份], [客户名称], [客户分部], [Manday], [金额_美金], [业务]) VALUES (11, 1, N'B', N'B1', 0, 0, N'manager1')
INSERT [dbo].[Source] ([ID], [月份], [客户名称], [客户分部], [Manday], [金额_美金], [业务]) VALUES (12, 1, N'B', N'B2', 1, 198, N'sales2')
INSERT [dbo].[Source] ([ID], [月份], [客户名称], [客户分部], [Manday], [金额_美金], [业务]) VALUES (13, 1, N'A', N'A1', 1, 160, N'sales2')
INSERT [dbo].[Source] ([ID], [月份], [客户名称], [客户分部], [Manday], [金额_美金], [业务]) VALUES (14, 2, N'A', N'A1', 1, 0, N'sales1')
INSERT [dbo].[Source] ([ID], [月份], [客户名称], [客户分部], [Manday], [金额_美金], [业务]) VALUES (15, 2, N'B', N'B1', 1, 0, N'sales2')
INSERT [dbo].[Source] ([ID], [月份], [客户名称], [客户分部], [Manday], [金额_美金], [业务]) VALUES (16, 3, N'B', N'B1', 1, 190, N'sales1')
INSERT [dbo].[Source] ([ID], [月份], [客户名称], [客户分部], [Manday], [金额_美金], [业务]) VALUES (17, 3, N'B', N'B1', 1, 198, N'sales2')
SET IDENTITY_INSERT [dbo].[Source] OFF
/****** Object: Table [dbo].[inspectors] Script Date: 02/23/2015 23:19:09 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[inspectors](
[中文名] [nvarchar](255) NULL,
[英文名] [nvarchar](255) NULL,
[归属] [nvarchar](255) NULL,
[状态] [nvarchar](255) NULL,
[1月金额] [float] NULL
) ON [PRIMARY]
GO
INSERT [dbo].[inspectors] ([中文名], [英文名], [归属], [状态], [1月金额]) VALUES (N'cs1', N'cs1_en', N'公司', N'cs', NULL)
INSERT [dbo].[inspectors] ([中文名], [英文名], [归属], [状态], [1月金额]) VALUES (N'inspector1', N'inspector1_en', N'Other', N'兼职', NULL)
INSERT [dbo].[inspectors] ([中文名], [英文名], [归属], [状态], [1月金额]) VALUES (N'sales1', N'sales1_en', N'公司', N'sales', NULL)
INSERT [dbo].[inspectors] ([中文名], [英文名], [归属], [状态], [1月金额]) VALUES (N'inspector2', N'inspector2_en', N'Other', N'兼职', NULL)
INSERT [dbo].[inspectors] ([中文名], [英文名], [归属], [状态], [1月金额]) VALUES (N'inspector3', N'inspector3_en', N'Other', N'兼职', NULL)
INSERT [dbo].[inspectors] ([中文名], [英文名], [归属], [状态], [1月金额]) VALUES (N'manager1', N'manager1_en', N'公司', N'manager', NULL)
/****** Object: Table [dbo].[clientsum] Script Date: 02/23/2015 23:19:09 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[clientsum](
[客户] [nvarchar](255) NULL,
[客户分部] [nvarchar](255) NULL,
[责任业务员] [nvarchar](255) NULL,
[单价_USD] [float] NULL,
[日常处理] [nvarchar](255) NULL,
[CS处理权重] [float] NULL
) ON [PRIMARY]
GO
INSERT [dbo].[clientsum] ([客户], [客户分部], [责任业务员], [单价_USD], [日常处理], [CS处理权重]) VALUES (N'A', N'A1', N'sales1', 140, N'cs1', 3)
INSERT [dbo].[clientsum] ([客户], [客户分部], [责任业务员], [单价_USD], [日常处理], [CS处理权重]) VALUES (N'A', N'A2', N'sales1_en', 198, N'cs1_en', 3)
INSERT [dbo].[clientsum] ([客户], [客户分部], [责任业务员], [单价_USD], [日常处理], [CS处理权重]) VALUES (N'B', N'B1', N'sales1', 198, N'cs1', 2)
INSERT [dbo].[clientsum] ([客户], [客户分部], [责任业务员], [单价_USD], [日常处理], [CS处理权重]) VALUES (N'B', N'B2', N'sales4', 198, N'cs1_en', 1)
INSERT [dbo].[clientsum] ([客户], [客户分部], [责任业务员], [单价_USD], [日常处理], [CS处理权重]) VALUES (N'B', N'B3', N'manager1', 198, N'cs1', 1)
INSERT [dbo].[clientsum] ([客户], [客户分部], [责任业务员], [单价_USD], [日常处理], [CS处理权重]) VALUES (N'C', N'C1', N'sales3', 198, N'cs1', 2)
INSERT [dbo].[clientsum] ([客户], [客户分部], [责任业务员], [单价_USD], [日常处理], [CS处理权重]) VALUES (N'D', N'D1', N'sales2', 198, N'cs1', 2)
2 个解决方案
#1
力气活,而且很难验证.
#2
确实有些复杂,但是验证不难的,我这里也提供了生成的样式数据库,直接可以导入调试。
分不够可以再加,求高手指点迷津啊!
#1
力气活,而且很难验证.
#2
确实有些复杂,但是验证不难的,我这里也提供了生成的样式数据库,直接可以导入调试。
分不够可以再加,求高手指点迷津啊!