我有一个需要创建的大订单列表,并且我需要获取每个订单的产品代码及其数量的列表。
为简化起见,我展示了单个订单的示例,但外部查询需要为系统中的每个订单提供此结果。
到目前为止,我有以下内容:
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 结果,但它不会让我将 GROUP_CONCAT 包裹在上面显示的 CONCAT 周围,因为我认为因为 SUM() 本身已经在进行分组。这是我需要返回的内容:
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'