作成する必要のある大量の注文リストがあり、注文ごとに製品コードとその数量のリストを取得する必要があります。
簡単にするために、単一の注文の例を示していますが、外部クエリは、システム内のすべての注文に対してこの結果を提供する必要があります。
これまでのところ、私は次のものを持っています:
mysql> select ProductCode,Quantity from OrderProducts where Order_ID = X;
+-------------+----------+
| ProductCode | Quantity |
+-------------+----------+
| PROD1 | 1 |
| PROD2 | 1 |
| PROD1 | 1 |
+-------------+----------+
3 rows in set (0.00 sec)
mysql> SELECT CONCAT(OrderProducts.ProductCode,' (',SUM(OrderProducts.Quantity),')') FROM OrderProducts WHERE Order_ID = X GROUP BY OrderProducts.ProductCode;
+------------------------------------------------------------------------+
| CONCAT(OrderProducts.ProductCode,' (',SUM(OrderProducts.Quantity),')') |
+------------------------------------------------------------------------+
| PROD1 (2) |
| PROD2 (1) |
+------------------------------------------------------------------------+
2 rows in set (0.00 sec)
必要なのは上記のクエリのGROUP_CONCATの結果ですが、SUM()がすでにグループ化を行っているため、上記のCONCATの周りにGROUP_CONCATをラップすることはできません。これが私が取り戻す必要があるものです:
PROD1 (2),PROD2 (1)
編集
上記のクエリの使用については不明でした。そのクエリを、のすべての注文をクエリするselect内のサブクエリとして使用しますOrders
。以下は、クエリの更新バージョンです。
SELECT
(
SELECT
GROUP_CONCAT(SerialNumberedProductCount)
FROM
(
SELECT
OrderProducts.Order_ID,
CONCAT(OrderProducts.ProductCode,' (',SUM(OrderProducts.Quantity),')') AS SerialNumberedProductCount
FROM
OrderProducts, Products
WHERE
OrderProducts.Order_ID = Orders.Order_ID AND
OrderProducts.Product_ID = Products.Product_ID AND
Products.IsSerialNumbered = 1
GROUP BY
OrderProducts.ProductCode
) SerialNumberedProductCountsSubQuery
WHERE
SerialNumberedProductCountsSubQuery.Order_ID = Orders.Order_ID
) AS SerialNumberedProductCounts
FROM
Orders
上記のクエリで、次のエラーが発生します。
ERROR 1054 (42S22): Unknown column 'Orders.Order_ID' in 'where clause'