如何为记录添加权重以找到最匹配的结果

时间:2018-08-28 23:43:46

标签: sql sql-server select

我正在使用ASP.net Web窗体C#和SQL服务为数据库开发Web应用程序。我有三个主表:

Services: ( more than 10K records)

Service_Id      Service_Description 
 1               Clean
 2               Oil Change
 3               Fluid Services
 4               Filter Replacement

另一个用于客户请求的表

Customer_Requests:
Customer_ResuestId      Customer_RequstedServices 
 1                      1
 1                      2
 1                      3
 1                      4
 2                      4
 2                      5

第三个主表是分支(我有500个分支;每个分支提供特定的服务)

Branches:
Branch_Id      Branch_AvailabeServices 
 1               1
 1               2
 1               3
 2               1
 2               2
 2               3
 2               4

我的问题是,如何为每个Customer_RequstedServices添加权重并找到最匹配的结果。例如,我希望结果是这样的:

客户请求#1

4 个服务请求(每个请求 25%

第2个分支提供了他请求的 100%,而第1个分支提供了他请求的 75%请求。

我想首先显示第2个分支,因为它满足了所有客户的要求。

我能够通过以下方式获得体重

Select count(Customer_ResuestId) as ServiceCount from Customer_Requests

然后我可以执行100 / ServiceCount来获取每条记录的权重。

但是我不知道如何找到每个分支机构可以为每个特定请求提供哪些服务。

任何帮助将不胜感激。如果权重无法衡量/难以衡量,那么找到提供最需要服务的分支机构的确会很棒并且可以接受。

1 个答案:

答案 0 :(得分:0)

这应该做到:

SELECT 
    Customer_ResuestId, 
    (Select Count(*) From Customer_Requests AS CRc 
        WHERE CR.Customer_ResuestId= CRC.Customer_ResuestId) as RequestedServices,
    Branch_Id, 
    Count(*) as MatchingServicesOffered 
FROM CustomerRequests CR 
INNER JOIN Branches B 
    ON B.Branch_AvailabeServices = CR.Customer_RequstedServices 
GROUP BY Customer_ResuestId, 
    Branch_Id 
ORDER BY Count(*) DESC