gpt4 book ai didi

c# - 销售人员记录

转载 作者:搜寻专家 更新时间:2023-10-30 22:01:23 24 4
gpt4 key购买 nike

我正在设计这个数据库和 C# 应用程序,记录被保存到数据库中。现在假设我们有三个销售人员,每个人都应该严格轮换分配一个记录,这样他们就可以处理相同数量的记录。

到目前为止,我所做的是创建一个名为 Records 的表和一个 SalesPerson,该 Records 会将销售人员 id 作为外键和另一列会说明它分配给哪个代理并将增加此列。

你认为这是一个好的设计,如果不是,你能给点意见吗?

最佳答案

为此,我将使用分析函数 ROW_NUMBERNTILE(假设您的 RDBMS 支持它们)。通过这种方式,您可以为每个可用的销售人员分配一个从 1 向上递增的伪 ID,然后为每个未分配的记录随机分配这些伪 ID 之一,以便在销售人员之间平均分配它们。使用伪 ID 而不是实际 ID 允许 SalesPersonID 字段不连续。例如

-- CREATE SOME SAMPLE DATA
DECLARE @SalesPerson TABLE (SalesPersonID INT IDENTITY(1, 1) NOT NULL PRIMARY KEY, Name VARCHAR(50) NOT NULL, Active BIT NOT NULL)
DECLARE @Record TABLE (RecordID INT IDENTITY(1, 1) NOT NULL PRIMARY KEY, SalesPersonFK INT NULL, SomeOtherInfo VARCHAR(100))

INSERT @SalesPerson VALUES ('TEST1', 1), ('TEST2', 0), ('TEST3', 1), ('TEST4', 1);
INSERT @Record (SomeOtherInfo)
SELECT Name
FROM Sys.all_Objects

使用此示例数据,第一步是找到可用的销售人员数量以将记录分配给:

DECLARE @Count INT = (SELECT COUNT(*) FROM @SalesPerson WHERE Active = 1) 

接下来使用 CTE 来包含窗口函数(因为它们不能在连接子句中使用)

;WITH Records AS
( SELECT *,
NTILE(@Count) OVER(ORDER BY NEWID()) [PseudoSalesPersonID]
FROM @Record
WHERE SalesPersonFK IS NULL -- UNALLOCATED RECORDS
), SalesPeople AS
( SELECT SalesPersonID,
ROW_NUMBER() OVER (ORDER BY SalesPersonID) [RowNumber]
FROM @SalesPerson
WHERE Active = 1 -- ACTIVE SALES PEOPLE
)

最后用实际的销售人员 ID 而不是伪 ID 更新记录 CTE

UPDATE  Records
SET SalesPersonFK = SalesPeople.SalesPersonID
FROM Records
INNER JOIN SalesPeople
ON PseudoSalesPersonID = RowNumber

ALL COMBINED IN AN SQL FIDDLE

关于c# - 销售人员记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12511092/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com