SQL:计算分组后的重复记录数量

时间:2013-04-23 13:00:45

标签: sql

我有一个大表,其中包含哪些项目(以及数量)属于哪个订单号的信息。

现在,这个表的特殊之处在于它记录了与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

非常感谢任何帮助!

2 个答案:

答案 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子句

添加特定记录