我正在开发一个使用SQL C#和ASP.net数据库服务的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来获得每条记录的权重。
但我不知道如何才能找到每个分支机构可以为每个特定请求提供哪些服务。
任何帮助都将不胜感激。如果权重不能/难以测量,那么找到提供最多请求服务的分支将是非常好和可接受的。
发布于 2018-08-29 08:11:51
这应该可以做到:
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
https://stackoverflow.com/questions/52067574
复制相似问题