SQL Server技术求助:如何获取符合匹配规则的非指定总数品牌订单
嘿,我来帮你搞定这个SQL Server的查询需求~ 不过得先提一句:你没给出三张数据表的具体结构,我先基于合理的业务场景做了表结构假设,你可以根据实际的字段/关联关系调整代码哦!
假设的表结构(你可以按需修改)
CompanyProducts:存储各公司的产品信息,核心字段:C_Company:公司名称(比如'华硕'、'戴尔'、'索尼')P_Name:产品全名
Orders:存储订单记录,核心字段:O_ID:唯一订单IDO_Name:订单中记录的产品名称片段(用来和产品表做模糊匹配)
方案一:基于公司所有订单数筛选(最常用场景)
这个方案先统计每个公司的全部订单总数,再筛选出不符合指定数值的公司,最后关联出满足模糊匹配条件的订单记录:
-- 用CTE先统计各公司的总订单数 WITH CompanyOrderStats AS ( SELECT cp.C_Company, COUNT(o.O_ID) AS TotalOrders FROM Orders o -- 通过模糊匹配关联订单和产品表,确定订单所属公司 JOIN CompanyProducts cp ON cp.P_Name LIKE '%' + o.O_Name + '%' GROUP BY cp.C_Company ) -- 关联回原始表,获取符合条件的记录 SELECT o.O_ID, o.O_Name, cp.C_Company, cp.P_Name, cos.TotalOrders FROM Orders o JOIN CompanyProducts cp ON cp.P_Name LIKE '%' + o.O_Name + '%' JOIN CompanyOrderStats cos ON cp.C_Company = cos.C_Company -- 应用筛选规则:华硕订单数≠4,戴尔≠5,索尼≠3 WHERE (cos.C_Company = '华硕' AND cos.TotalOrders != 4) OR (cos.C_Company = '戴尔' AND cos.TotalOrders != 5) OR (cos.C_Company = '索尼' AND cos.TotalOrders != 3)
方案二:基于满足模糊匹配的订单数筛选
如果你的需求里“订单总数”特指满足模糊匹配条件的该公司订单数,可以用这个调整后的版本:
WITH FilteredOrderStats AS ( SELECT cp.C_Company, COUNT(o.O_ID) AS FilteredTotalOrders FROM Orders o JOIN CompanyProducts cp ON cp.P_Name LIKE '%' + o.O_Name + '%' GROUP BY cp.C_Company ) SELECT o.O_ID, o.O_Name, cp.C_Company, cp.P_Name, fos.FilteredTotalOrders FROM Orders o JOIN CompanyProducts cp ON cp.P_Name LIKE '%' + o.O_Name + '%' JOIN FilteredOrderStats fos ON cp.C_Company = fos.C_Company WHERE (fos.C_Company = '华硕' AND fos.FilteredTotalOrders != 4) OR (fos.C_Company = '戴尔' AND fos.FilteredTotalOrders != 5) OR (fos.C_Company = '索尼' AND fos.FilteredTotalOrders != 3)
几个实用小贴士
- 如果订单和产品表有直接外键关联(比如
Orders.ProductID = CompanyProducts.CP_ID),优先用外键关联代替模糊匹配,这样查询性能更好,也能避免模糊匹配带来的关联错误。 - 如果担心同一张订单被关联到多个产品导致计数重复,可以把
COUNT(o.O_ID)改成COUNT(DISTINCT o.O_ID)。 - 如果公司名称存在大小写差异(英文场景),可以用
LOWER(cp.C_Company)统一处理后再判断。
内容的提问来源于stack exchange,提问作者saittin
相关产品推荐
相关产品推荐

