2017-08-31 8 views
0

私はすべての注文ラインとその注文ラインの製品数を記載した以下のSQLを持っています。単一の行がkitsQtyShipped数の総計と各キットに与えられているように私が必要なもの商品ごとに注文番号を付与するための注文数量を追加

+-----------+--------------------------+---------------+ 
| KitNumber | Kitname     | KitQtyShipped | 
+-----------+--------------------------+---------------+ 
| 269588 | product2     |   30 | 
| 269291 | product1     |    3 | 
| 269291 | product1     |    1 | 
| 269291 | product1     |    2 | 
| 269291 | product1     |    3 | 
| 269291 | product1     |    3 | 
| 269291 | product1     |    2 | 
| 269291 | product1     |    1 | 
| 269291 | product1     |    4 | 
| 269291 | product1     |    1 | 
| 269291 | product1     |    2 | 
| 269291 | product1     |    1 | 
| 269291 | product1     |    2 | 
| 269291 | product1     |    1 | 
| 269291 | product1     |    4 | 
| 269291 | product1     |    1 | 
| 269291 | product1     |    2 | 
| 269291 | product1     |    2 | 
| 269291 | product1     |    1 | 
| 269291 | product1     |    2 | 
| 269291 | product1     |    1 | 
| 269291 | product1     |    2 | 
| 269291 | product1     |    1 | 
| 269290 | product3     |    2 | 
| 269290 | product3     |    3 | 
| 269290 | product3     |    2 | 
| 269290 | product3     |   10 | 
| 269290 | product3     |    3 | 
| 269290 | product3     |   26 | 
| 269290 | product3     |    1 | 
| 269290 | product3     |   11 | 
| 269290 | product3     |    5 | 

ような出力を与える

SELECT p.externalReference as KitNumber, 
     p.description as Kitname, 
     (SELECT quantity 
     FROM order_line 
     WHERE id = ol.id) as KitQtyShipped 
    FROM order_line ol 
    JOIN shipment s ON ol.shipmentId = s.id 
    JOIN product p ON ol.productId = p.id 
    JOIN order_item oi ON s.orderItemId = oi.id 
WHERE s.state = 'despatched' 
    AND ol.quantity != 0 
ORDER BY KitNumber DESC; 

はKitNumberによってグループに、このあります。つまり、すべての行以上が、私が試してみました

各キットのために一緒に加え:

SELECT p.externalReference as KitNumber, 
     p.description as Kitname, 
     COUNT(*) * (SELECT quantity 
        FROM order_line 
        WHERE id = ol.id) as KitQtyShipped 
    FROM order_line ol 
    JOIN shipment s ON ol.shipmentId = s.id 
    JOIN product p ON ol.productId = p.id 
    JOIN order_item oi ON s.orderItemId = oi.id 
WHERE s.state = 'despatched' 
    AND ol.quantity != 0 
GROUP BY ol.productId 
ORDER BY KitNumber DESC; 

が、それは正しい値

にそれが何かのように取得するために探して出力イムを与えるものではありません。

+-----------+--------------------------+--------------------------+ 
| KitNumber | Kitname     | KitQtyShipped   | 
+-----------+--------------------------+--------------------------+ 
| 269588 | product2     |(Sum of all orderlines) 30| 
| 269291 | product1     |      45 | 
| 269290 | product3     |      63 | 
+1

適切な値がわからない場合は、お手伝いができません。私たちにdbスキーマ、サンプルデータ、現在および予想される出力を表示します。 \t [** How-to-Ask **](http://stackoverflow.com/help/how-to-ask) \t \t [**スタート**] (http://spaghettidba.com/2015/04/24/how-to-post-at-sql-question-on-a-public-forum/)質問品質を改善し、より良い回答を得る方法を学ぶことができます。 \t [**最小限の完全で検証可能なサンプルを作成する方法**](http://stackoverflow.com/help/mcve) –

+0

投稿したサンプルデータに基づいてPlsの出力が望ましい投稿 – etsa

+0

@etsaが追加されました希望 –

答えて

0

私はあなたが(私はテーブルのスクリプトを作成していないとして、私はそれをテストすることができなかったので、plsは、それを確認してください)期待するよりも簡単かもしれないと思う: 私はちょうどあなたの最初のクエリでSUM、GROUP BYを追加しました:

SELECT p.externalReference as KitNumber, 
     p.description as Kitname, 
     SUM(ol.quantity) as KitQtyShipped 
    FROM order_line ol 
    JOIN shipment s ON ol.shipmentId = s.id 
    JOIN product p ON ol.productId = p.id 
    JOIN order_item oi ON s.orderItemId = oi.id  
WHERE s.state = 'despatched' 
    AND ol.quantity != 0 
GROUP BY p.externalReference, p.description 
ORDER BY KitNumber DESC; 
+0

改訂された回答を参照 – etsa

+0

おそらく 'AND ol.quantity!= 0'は必要ありません –

0

私はあなたが必要だと思う:

SELECT p.externalReference as KitNumber, 
     p.description as Kitname, 
     SUM(quantity) as KitQtyShipped 
    FROM order_line ol 
    JOIN shipment s ON ol.shipmentId = s.id 
    JOIN product p ON ol.productId = p.id 
    JOIN order_item oi ON s.orderItemId = oi.id 
WHERE s.state = 'despatched' 
    -- AND ol.quantity != 0 -- no need this to SUM 
GROUP BY p.externalReference, p.description 
ORDER BY KitNumber DESC 

しかし、元のデータがなくても、予想される出力はまあまあです。

order_itemを使用しないでください。これでも動作するはずです:

SELECT p.externalReference as KitNumber, 
     p.description as Kitname, 
     SUM(quantity) as KitQtyShipped 
    FROM order_line ol 
    JOIN shipment s ON ol.shipmentId = s.id 
    JOIN product p ON ol.productId = p.id  
WHERE s.state = 'despatched' 
GROUP BY p.externalReference, p.description 
ORDER BY KitNumber DESC 
+0

編集をチェックして未使用のテーブルを削除します –

0

さらに簡単にテンポラリテーブルに設定して合計してカウントします。 MYSQL構文の一部が正しくない場合は、私を許してください。

EDIT:KitShippedの合計を調べる場合は、COUNTではなくSUM GROUP BY KitNumberを使用します。

--Create a temp table for your SQL query 
CREATE TEMPORARY TABLE IF NOT EXISTS SumTable AS 
(SELECT 
p.externalReference as KitNumber, 
p.description as Kitname, 
(SELECT quantity from order_line WHERE id = ol.id) as KitQtyShipped 

FROM order_line ol 
JOIN shipment s ON ol.shipmentId = s.id 
JOIN product p ON ol.productId = p.id 
JOIN order_item oi ON s.orderItemId = oi.id 
WHERE s.state = 'despatched' AND ol.quantity != 0) 

--Do your sum here. 

Select Sum(KitQtyShipped) as TotalShipped, KitNumber from Sumtable 
Group by KitNumber 
関連する問題