【发布时间】:2021-11-14 04:40:01
【问题描述】:
我正在尝试编写一个 SQL 查询,该查询将根据值是负数还是正数,返回每个客户的发货零件编号总和的唯一行。例如:
如果我们两次将 20 个 Z 部件运送给客户 A,而他们将 6 个部件退回给我们,则会显示:
+-----------------+-------------+---------+
| Customer_Number | Part_Number | Shipped |
+-----------------+-------------+---------+
| A | Z | 20 |
| A | Z | 20 |
| A | Z | -6 |
+-----------------+-------------+---------+
运行查询后,预期结果:
+-----------------+-------------+---------+
| Customer_Number | Part_Number | Shipped |
+-----------------+-------------+---------+
| A | Z | 40 |
| A | Z | -6 |
+-----------------+-------------+---------+
我想出的查询是:
SELECT
Customer_Number,
Part_Number,
CASE
WHEN Ship_Quantity > 0 THEN SUM(Ship_Quantity)
WHEN Ship_Quantity < 0 THEN SUM(Ship_Quantity)
END
FROM Sales_Line
GROUP BY
Customer_Number,
Part_Number
但我得到错误:
列无效。必须是按列分组:SELECT 中的 Ship_Quantity 列表。
当我将“Ship_Quantity”添加到我的 GROUP BY 时,它不会给出准确的结果:
原始输入:
+-----------------+---------------+---------+
| Customer_Number | Part_Number | Shipped |
+-----------------+---------------+---------+
| A080 | C76 | -11.0 |
| A080 | C76 | -1.0 |
| A080 | C76 | -2.0 |
| A080 | C76 | -1.0 |
| A080 | C76 | -1.0 |
| A080 | C76 | 21.0 |
| A080 | C76 | 79.0 |
| A080 | C76 | 1.0 |
| A080 | C76 | 11.0 |
| A080 | C76 | 99.0 |
| A045 | X150 | -6.0 |
| A045 | X150 | -1.0 |
| A045 | X150 | -11.0 |
| A045 | X150 | -2.0 |
| A045 | X150 | -1.0 |
| A045 | X150 | -1.0 |
| A045 | X150 | -1.0 |
| A045 | X150 | 373.0 |
| A045 | X150 | 12.0 |
| A045 | X150 | 1.0 |
| A045 | X150 | 300.0 |
| A045 | X150 | 146.0 |
| A045 | X150 | 150.0 |
| A045 | X150 | 150.0 |
| A045 | X150 | 200.0 |
| A045 | X150 | 150.0 |
| A045 | X150 | 150.0 |
+-----------------+---------------+---------+
查询后:
+-----------------+---------------+---------+
| Customer_Number | Part_Number | Shipped |
+-----------------+---------------+---------+
| A045 | X150 | 300.0 |
| A045 | X150 | 373.0 |
| A080 | C76 | -11.0 |
| A080 | C76 | -2.0 |
| A080 | C76 | -3.0 |
+-----------------+---------------+---------+
我该怎么做呢?
【问题讨论】:
-
<>0怎么样,<0或>0表示不为零?很抱歉对 SQL 不熟悉。 -
@tailsparkrabbitear 结果相同