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

SQL:按分组后重复记录的计数数量,sql,Sql,我有一个大表,其中包含关于哪些项目(以及数量)属于哪个ordernumber的信息 现在,这个表的特殊之处在于它记录了链接到ordernumber的项目中所做的所有更改。有点像这样: OrderNumber | ItemNumber | ItemAmnt 125 ITM1 2 125 ITM1 -2 125 ITM1 1 125 ITM2 5 125

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

现在,这个表的特殊之处在于它记录了链接到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
SELECT ordernumber, itemnumber, SUM(itemamnt)
FROM
(
    SELECT DISTINCT ordernumber, itemnumber, itemamnt
    FROM item2order
    WHERE ordernumber='125' 
) AS SubQ
GROUP BY ordernumber, itemnumber
为了使问题更加困难,它还插入了看似随机的重复记录。让它看起来像这样:

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的总和,忽略重复的数量(也称为计数列)。例如:对于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

非常感谢您的帮助

如果我理解的话,你已经完成了一半的工作。
将您编写的查询用作
SUM
查询的子查询,如下所示:

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
SELECT ordernumber, itemnumber, SUM(itemamnt)
FROM
(
    SELECT DISTINCT ordernumber, itemnumber, itemamnt
    FROM item2order
    WHERE ordernumber='125' 
) AS SubQ
GROUP BY ordernumber, itemnumber
我已经用
DISTINCT
替换了
组,但结果是一样的。使用
DISTINCT
的可读性更好,因为它做的正是您想要的,在求和之前消除重复项。

尝试此查询

SELECT 
   ordernumber, 
   itemnumber, 
   sum(itemamt) AS TotalAmt
FROM 
   item2order
GROUP BY 
   ordernumber, 
   itemnumber

如果您想根据
where
子句添加特定记录

您使用的RDBMS和版本是什么?它是一个旧的Foxpro.DBF-file@AleixHernandez如何在
windows7
中运行FoxPro。我已经搜索了很多,但没有找到任何相关和可靠的答案。你能帮帮我吗?谢谢!这可能是现代应用程序中的答案,但子查询在foxpro中似乎不起作用(或者我似乎无法让它起作用)。您遇到了什么错误?再试一次,我为子查询添加了一个别名,大多数DBMS都需要别名,我只是忘记了。