我有一个大表,其中包含哪些项目(以及数量)属于哪个订单号的信息。
现在,这个表的特殊之处在于它记录了与ordernumber相关联的项目中所做的所有更改。有点像这样:
OrderNumber | ItemNumber | ItemAmnt
125 ITM1 2
125 ITM1 -2
125 ITM1 1
125 ITM2 5
125 ITM2 -5
125 ITM2 3
125 ITM3 1
125 ITM4 2
为了使问题更加困难,它还会插入看似随机数量的重复记录。看起来像这样:
OrderNumber | ItemNumber | ItemAmnt | Count
125 ITM1 2 5
125 ITM1 -2 4
125 ITM1 1 7
125 ITM2 5 3
125 ITM2 -5 4
125 ITM2 3 2
125 ITM3 1 3
125 ITM4 2 3
我想要实现的是将每个ItemNumber的ItemAmnt总结为IGNORING重复数量(a.k.a Count列)。例如:对于ITM1,这将是“2 - 2 + 1 = 1”,对于ITM2,它将是“5 - 5 + 3 = 3”。
我希望我能在这里说清楚,我很乐意详细说明。
目前实现上表的SQL代码:
select ordernumber, itemnumber, itemamnt, count(*) From item2order Where ordernumber='125' group by itemnumber, itemamnt
非常感谢任何帮助!
答案 0 :(得分:3)
如果我明白,你已完成了一半的工作
使用您编写的查询作为SUM
查询的子查询,如下所示:
SELECT ordernumber, itemnumber, SUM(itemamnt)
FROM
(
SELECT DISTINCT ordernumber, itemnumber, itemamnt
FROM item2order
WHERE ordernumber='125'
) AS SubQ
GROUP BY ordernumber, itemnumber
我已将GROUP BY
替换为DISTINCT
,但结果相同。 DISTINCT
的可读性更好,因为它正是您想要的,在求和之前消除重复。
答案 1 :(得分:0)
尝试此查询
SELECT
ordernumber,
itemnumber,
sum(itemamt) AS TotalAmt
FROM
item2order
GROUP BY
ordernumber,
itemnumber
如果您想要根据where
子句