0

カウントは1つの関連するテーブルで正常に機能しますが、合計を追加すると、カウントで過膨張した結果が得られます。

SELECT Orders.kp_OrderID AS `Order #`, 
    Orders.t_ServiceLevel AS `Service Level`, 
    Customers.t_CustCompany AS Company, 
    Orders.t_JobName AS `Job Name`, 
    Orders.t_JobStatus AS `Status`, 
    Orders.d_JobDue AS Due, 
    Orders.ti_JobDue AS Time, 
    COUNT(OrderItems.kf_OrderID) AS `Line Item`, 
    SUM(
        `OrderItemComponents`.`n_QuantityPrintMaterial` * (
        `OrderItemComponents`.`n_WidthInInches` * `OrderItemComponents`.`n_HeightInInches` / 144
            )
        ) AS SqFt, 
    Orders.nb_JobFinished AS Finished
FROM Orders 
     INNER JOIN OrderItems ON Orders.kp_OrderID = OrderItems.kf_OrderID
     INNER JOIN Customers ON Orders.kf_CustomerID = Customers.kp_CustomerID
     INNER JOIN OrderItemComponents ON OrderItemComponents.kf_OrderID = Orders.kp_OrderID
    WHERE Orders.d_JobDue > (
        DATE_SUB(CURDATE(), INTERVAL 60 DAY)
         )
    GROUP BY Orders.kp_OrderID
    ORDER BY `Line Item` DESC
4

2 に答える 2

2

COUNT 行を次のように切り替えます。

COUNT(DISTINCT OrderItems.kf_OrderID) AS `Line Item`

行を追加する場合

INNER JOIN OrderItemComponents 
  ON OrderItemComponents.kf_OrderID = Orders.kp_OrderID

OrderItem には複数のコンポーネントを含めることができるため、さらに多くの行が返されました。

アップデート

COUNT ステートメントが次の場合は、これを代わりに使用してみてください。

(SELECT COUNT(OrderItems.kf_OrderID) 
 FROM OrderItems.kf_OrderID 
 WHERE OrderItems.kf_OrderID=Order.kf_OrderID) AS `Line Item`,
于 2012-07-25T14:54:25.157 に答える
1

各注文アイテムのコンポーネントごとに、各注文アイテムが繰り返されると仮定します。解決策の 1 つCOUNT(DISTINCT OrderItems.kf_OrderID)は、同じ項目を 2 回カウントしないようにすることです。

于 2012-07-25T14:55:26.653 に答える