我正在构建一个佣金计算器,但我不确定如何进行。我有这样的情况:客户 123 的 saleRep A 在前 2 年获得 2%,然后是 0.5%。我已经知道如何获取客户的年龄。
日期范围是可变的。这意味着一个 salesRep/Customer 组合可以在 1 年、2 年、任何时候拆分,但可能在当年拆分。
那么,我该如何查询和存储呢?我的佣金表目前如下,我需要更改吗?
CREATE TABLE [dbo].[NCL_Commissions](
[ID] [int] IDENTITY(1,1) NOT NULL,
[ProductType] [varchar](255) NULL,
[LowCost] [int] NULL,
[HighCost] [int] NULL,
[CustCode] [varchar](30) NULL,
[SalesRep] [varchar](10) NULL,
[Commission] [float] NULL,
[MinAge] [smallint] NULL,
[MaxAge] [smallint] NULL,
CONSTRAINT [PK_NCL_Commissions] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
当我被告知所有佣金都相同时,我是这样构建它的:
DECLARE @custCreationDate datetime
SET @custCreationDate = ( SELECT TOP 1 cast(INVDate as datetime)
FROM InvoiceHeader
WHERE companycode = @custCode
order by recid asc )
-- PRINT 'Line 54: @custCreationDate: ' + cast(@custCreationDate as varchar)
--If the customer has existed for less than a year
IF @custCreationDate > DateAdd(yy, -1, @now)
BEGIN
SET @result = 2.00 --Customers in existance for less than a year yeild 2% commission
-- PRINT 'Line 60 - @result: ' + cast(@result as varchar)
GOTO Exit_Function
END
ELSE
BEGIN
SET @result = 0.50 --Customers in existance longer yeild 0.5 % commission.
-- PRINT 'Line 66 - @result: ' + cast(@result as varchar)
GOTO Exit_Function
END
样本数据(部分问题是寻找有关如何存储的建议)
销售代表 A 的客户 123 在前 2 年获得 1%,比 0.5%
销售代表 B 的客户 456 在前 1 年获得 2%,比 0.75%
在任何给定时间,我都必须能够根据客户的当前年龄获得正确的百分比。因此,如果客户 A 是在 2012 年 6 月 1 日创建的,则佣金为 2%。如果客户是在 2008 年 9 月 5 日创建的,则佣金为 0.5%。
解决方案基于 Gordon Linoff 的回答:
SET @custAgeInMonths = datediff(month, @custCreationDate, @invDate)
--First look for a customer specific record
SELECT @result = C.Commission
FROM NCL_Commissions C
WHERE C.CustCode = @custCode
AND C.SalesRep = @salesRep
AND ProductType in ('L')
AND @custAgeInMonths BETWEEN C.MinAgeMonths AND C.MaxAgeMonths