Sql 显示只剩下一项的位置

Sql 显示只剩下一项的位置,sql,oracle,group-by,aggregate,having,Sql,Oracle,Group By,Aggregate,Having,我想显示只剩下一个项目的所有位置。尝试使用SUM函数,但它仍然为我提供了多个具有相同位置的行,其中3个行的和为1 选择位置、编号、总数(数量) 从地点到库存 按地点分组,artnr 有总和(数量)=1 结果: 位置艺术品数量总和(数量) 12345 5345 1 12345 5874 1 12345 4756 1 我想要的是具有一个商品编号和一个数量的位置: 位置艺术品数量总和(数量) 1234553451您可以使用行数()窗口功能 select * from

我想显示只剩下一个项目的所有位置。尝试使用SUM函数,但它仍然为我提供了多个具有相同位置的行,其中3个行的和为1

选择位置、编号、总数(数量)
从地点到库存
按地点分组,artnr
有总和(数量)=1

结果:

位置艺术品数量总和(数量)
12345     5345    1
12345     5874    1
12345 4756 1

我想要的是具有一个商品编号和一个数量的位置:

位置艺术品数量总和(数量)

1234553451

您可以使用
行数()
窗口功能

   select * from ( SELECT location, artnr, sum(qty) as s,
    row_number() over(partition by location order by artnr asc) rn
    FROM location_stock
    GROUP BY location, artnr
    HAVING sum(qty) = 1
    ) a where a.rn=1

假设数量从不为负或零,那么这应该是可行的:

SELECT location, max(artnr) as artnr, sum(qty)
FROM location_stock
GROUP BY location
HAVING SUM(qty) = 1;
对于更一般的解决方案:

SELECT location, max(artnr) as artnr, sum(qty)
FROM location_stock
GROUP BY location
HAVING MIN(artnr) = MAX(artnr) AND
       SUM(qty) = 1;

如果您实际上不关心数量,而只关心一个
artnr
,那么请删除
SUM(quaty)

上的条件,为什么您只需要5345作为列Art nr,这只是一个示例。在我的示例中,我们有位置12345,其中有3篇文章。我想要的只是有一篇文章的位置。