【问题标题】:How to Filter Data in SQL Without Using Group By / Having Functions如何在不使用 Group By / 有函数的情况下过滤 SQL 中的数据
【发布时间】:2022-01-04 06:57:33
【问题描述】:

有一种情况,我正在尝试生成一个查询,该查询显示销售订单上的商品编号以及所有订单的未完成总数量。我可以这样做:

SELECT 
SL.[Item No_], 
SUM(SL.[Outstanding Quantity]) 

FROM [Database$Sales Header] SH
LEFT JOIN [Database$Sales Line] SL ON SL.[Document No_] = SH.[No_]
LEFT JOIN [Database$Items] I ON I.[No_] = SL.[Item No_]

GROUP BY 
SL.[Item No_], 
SH.[Document Type], 
I.[Product Code]

HAVING
SH.[Document Type] = '1'
AND I.[Product Code] = 'SHIRT'

ORDER BY
SL.[Item No_]

上面的代码给了我一个项目#和数量的简单总结。在所有销售订单上。 我正在使用 HAVING 子句仅包含销售订单(文档类型) 并且仅限衬衫(产品代码)。

我遇到的问题是当我想排除特定客户时。

我尝试将:AND SH.[Customer No_] 'CUST1' 添加到 HAVING 子句,但如果这样做,SQL 将要求我将其添加到 GROUP BY 子句中。结果是我在之前总结的地方得到了重复的行,因为现在 SQL 正在按项目 # 和客户 # 报告未完成的数量,这不是我想要的。

所以我不确定如何在不将其放入 GROUP BY 的情况下排除该客户。

【问题讨论】:

    标签: sql group-by common-table-expression partition-by


    【解决方案1】:

    请使用 where 子句过滤数据。

    SELECT 
    SL.[Item No_], 
    SUM(SL.[Outstanding Quantity]) 
    
    FROM [Database$Sales Header] SH
    LEFT JOIN [Database$Sales Line] SL ON SL.[Document No_] = SH.[No_]
    LEFT JOIN [Database$Items] I ON I.[No_] = SL.[Item No_]
    
    where SH.[Customer No_] <> 'CUST1' 
    
    GROUP BY 
    SL.[Item No_], 
    SH.[Document Type], 
    I.[Product Code]
    
    HAVING
    SH.[Document Type] = '1'
    AND I.[Product Code] = 'SHIRT'
    
    ORDER BY
    SL.[Item No_]
    

    【讨论】:

      猜你喜欢
      • 2016-09-20
      • 2021-04-06
      • 2013-04-08
      • 1970-01-01
      • 2021-08-12
      • 1970-01-01
      • 2012-01-26
      • 2022-11-10
      • 1970-01-01
      相关资源
      最近更新 更多