【问题标题】:How to Count total rows on a shipment如何计算货件的总行数
【发布时间】:2018-10-12 12:10:21
【问题描述】:

我正在尝试计算每批货物的总行数:

SELECT  Shipments.ShipmentId, 
        SalesOrders.SalesOrderId as OrderNumber,  
        Count(SalesOrderItems.SalesOrderItem) as NumberOfLines

FROM SalesOrders 

INNER JOIN SalesOrderItems on SalesOrders.SalesOrder = SalesOrderItems.SalesOrder 
INNER JOIN Shipments on SalesOrderItems.SalesOrder = Shipments.SalesOrder

GROUP BY SalesOrderItems.SalesOrderItem, SalesOrders.SalesOrderId, Shipments.ShipmentId

ORDER BY Shipments.ShipmentID ASC

目前我得到:

ShipmentID  | OrderNumber    | NumberOfLines
SH00000001  | SO-0000001     | 1
SH00000001  | SO-0000001     | 1
SH00000002  | SO-0000007     | 1
SH00000003  | SO-0000006     | 1
SH00000003  | SO-0000006     | 1

我应该得到:

ShipmentID  | OrderNumber    | NumberOfLines
SH00000001  | SO-0000001     | 1
SH00000001  | SO-0000001     | 2
SH00000002  | SO-0000007     | 1
SH00000003  | SO-0000006     | 1
SH00000003  | SO-0000006     | 2

【问题讨论】:

    标签: sql join count


    【解决方案1】:

    从您的 group by 子句中删除 SalesOrderItems.SalesOrderItem,您不需要它(可以从它推断出它在您的示例结果数据集上不存在)。

    【讨论】:

      【解决方案2】:

      您的GROUP BY 子句应与SELECT 中的未聚合 列匹配:

      SELECT s.ShipmentId, 
             so.SalesOrderId as OrderNumber,  
             Count(soi.SalesOrderItem) as NumberOfLines
      FROM SalesOrders so INNER JOIN
           SalesOrderItems soi
           ON so.SalesOrder = soi.SalesOrder INNER JOIN
           Shipments s
           ON soi.SalesOrder = s.SalesOrder
      GROUP BY soi.SalesOrderId, s.ShipmentId
      ORDER BY s.ShipmentID ASC;
      

      请注意,我添加了表别名。这些使查询更易于编写和阅读。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-20
        • 2012-07-25
        • 2021-03-24
        • 2014-07-09
        • 2021-05-23
        相关资源
        最近更新 更多