0

我有两个具有一对多关系的表(orders、order_lines)。orders 表将有一行,而 order_lines 表将有一行用于附加到订单的每个产品。

订单

   +----------+-------------+---------------+
   |order_num | total_order | shipping_total|
   +----------+-------------+---------------+
   | 12345    | 75.00       | 15.00         |
   +----------+-------------+---------------+

ORDER_LINES

   +----------+-------------+-------+
   | order_num| volume      | price |
   +----------+-------------+-------+
   | 12345    |10           |25.00  |
   +----------+-------------+-------+
   | 12345    |20           |25.00  |
   +----------+-------------+-------+
   | 12345    |20           |25.00  |
   +----------+-------------+-------+

我想总结 ORDERS 表中的 total_order 和 shipping_total 列以及 ORDER_LINES 表中的量和价格列。

查询当前不起作用:

SELECT b_orders.bill_country, b_orders.ship_country
    , SUM(volume) AS v, SUM(price) AS pt
    , SUM(shipping_total) AS st, SUM(total_order) AS tot_o 
FROM b_orders 
JOIN b_order_lines 
    ON b_orders.order_num = b_order_lines.order_num 
WHERE DATE(b_orders.order_date) BETWEEN '2012-04-02' AND '2012-04-06' 
    AND ship_country = 'USA' 
    AND b_order_lines.price > 0;

此查询返回错误的值。我有点知道为什么,但不知道如何编写正确的查询...请帮助。

4

2 回答 2

3

当您使用聚合函数 lineSUM时,您需要告诉 SQL Server 哪些列将用于GROUP BY进行求和。

因此,如果您将以下内容添加到查询的底部:

GROUP BY
  b_orders.bill_country, b_orders.ship_country

这将告诉它为您提供bill_country, ship_country数据中每个唯一组合的总和。这是你想要的?

于 2012-04-06T20:40:04.927 回答
0

如果 bill_country 和 ship_country 将包含在也具有 SUM 等聚合函数的查询中,则需要对它们进行分组。我怀疑你只需要在最后添加这一行:

GROUP BY  b_orders.bill_country, b_orders.ship_country;

如果您不需要查看它们,可以将它们从 SELECT 语句中删除并省略分组;您不必选择列以将它们包含在 WHERE 子句中。

于 2012-04-06T20:44:58.220 回答