You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server技术求助:如何获取符合匹配规则的非指定总数品牌订单

嘿,我来帮你搞定这个SQL Server的查询需求~ 不过得先提一句:你没给出三张数据表的具体结构,我先基于合理的业务场景做了表结构假设,你可以根据实际的字段/关联关系调整代码哦!

假设的表结构(你可以按需修改)

  • CompanyProducts:存储各公司的产品信息,核心字段:
    • C_Company:公司名称(比如'华硕'、'戴尔'、'索尼')
    • P_Name:产品全名
  • Orders:存储订单记录,核心字段:
    • O_ID:唯一订单ID
    • O_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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:28:29