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

如何修改SQL查询,仅输出location实例数>3的Item相关行

解决方法

你需要筛选出对应Item拥有超过3个不同location实例的分组结果,直接在原查询的HAVING子句中添加条件会失效——因为原查询是按location和Item分组,每个分组里的location是唯一的,COUNT(DISTINCT location)永远等于1,无法满足大于3的条件。

下面提供两种可行的修改方案:

方案一:子查询预筛选符合条件的Item

先通过子查询找出满足条件(拥有超过3个不同location)的Item,再关联原查询获取分组求和结果:

SELECT t.location, t.Item, SUM(t.TxQty) AS Total
FROM tblimInvTxHistory t
INNER JOIN (
    -- 先筛选出location实例数>3的Item
    SELECT Item
    FROM tblimInvTxHistory
    WHERE TxDate > '2022-01-01' AND TxCode IN ('COSHIP', 'SHIP')
    GROUP BY Item
    HAVING COUNT(DISTINCT location) > 3
) filtered_items ON t.Item = filtered_items.Item
WHERE t.TxDate > '2022-01-01' AND t.TxCode IN ('COSHIP', 'SHIP')
GROUP BY t.location, t.Item
ORDER BY Item

方案二:窗口函数计算location实例数

使用窗口函数在分组时直接计算每个Item对应的location总数,再过滤结果:

WITH grouped_data AS (
    SELECT 
        location, 
        Item, 
        SUM(TxQty) AS Total,
        -- 按Item分区,统计每个Item的不同location数量
        COUNT(DISTINCT location) OVER (PARTITION BY Item) AS location_count
    FROM tblimInvTxHistory
    WHERE TxDate > '2022-01-01' AND TxCode IN ('COSHIP', 'SHIP')
    GROUP BY location, Item
)
SELECT location, Item, Total
FROM grouped_data
WHERE location_count > 3
ORDER BY Item

两种方案都能实现需求,窗口函数的写法更简洁,子查询的方式在部分老版本SQL Server中兼容性更好。

内容的提问来源于stack exchange,提问作者NBeason

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 17:22:38