我正在使用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来获取每条记录的权重。
但是我不知道如何找到每个分支机构可以为每个特定请求提供哪些服务。
任何帮助将不胜感激。如果权重无法衡量/难以衡量,那么找到提供最需要服务的分支机构的确会很棒并且可以接受。
答案 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