在SQL中,如何在具有GROUP BY子句中不存在的5个以上列的SQL中执行计数相同值?

我在选择列表中有5列,并想再增加一个计数列,该列为该列中的每个[Locations]计数相同[Locations]的数目。下面是我的代码:

SELECT [ItemTable].[Item_Number],
       [ProductTable].[Product Series],
       [SalesTable].[Locations],
       COUNT(SalesTable.Locations),
       [ItemTable].[Quantity],
       [SalesTable].[Shipping Date]
FROM [ItemTable] 
  inner join [SalesTable] on 
  [ItemTable].[Sales_Doc_Num]=[SalesTable].[Sales_Doc_Num] 
  left join [ProductTable] on
  [ItemTable].[Item_Number]=[ProductTable].[ITEMNMBR]
WHERE[SalesTable].[Shipping Date]='04/03/2020'
GROUP BY SalesTable.Locations

错误是:

在选择列表中,列“ Item_Number”无效,因为它既不包含在聚合函数中,也不包含在GROUP BY子句中。

我知道这是一个逻辑错误,但我不知道该如何处理。我试图将所有这些列添加到GROUP BY子句中,不会有任何错误,但计数列中的所有值都是1,这不是我要的内容。 我也尝试过子查询,但遇到另一个错误。

我正在寻找的最终数据是:

评论
  • 死肥仔
    死肥仔 回复

    您似乎在寻找窗口计数而不是聚合:

    SELECT [ItemTable].[Item_Number],
           [ProductTable].[Product Series],
           [SalesTable].[Locations],
           COUNT(*) OVER(PARTITION BY SalesTable.Locations) CNT,  --> here
           [ItemTable].[Quantity],
           [SalesTable].[Shipping Date]
    FROM [ItemTable] 
      inner join [SalesTable] on 
      [ItemTable].[Sales_Doc_Num]=[SalesTable].[Sales_Doc_Num] 
      left join [ProductTable] on
      [ItemTable].[Item_Number]=[ProductTable].[ITEMNMBR]
    WHERE[SalesTable].[Shipping Date]='04/03/2020'