显示只剩下一个项目的位置

问题描述 投票:-1回答:2

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

SELECT location, artnr, sum(qty) FROM location_stock GROUP BY location, artnr HAVING sum(qty) = 1

结果:

Location Art Nr Sum(Qty) 12345 5345 1 12345 5874 1 12345 4756 1

我想要的是有一篇文章nr和一个数量的位置:

Location Art Nr Sum(Qty) 12345 5345 1

sql oracle group-by aggregate having
2个回答
0
投票

你可以使用row_number()窗口功能

   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

0
投票

假设数量从不为负或为零,那么这应该有效:

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(qty)上的条件。

© www.soinside.com 2019 - 2024. All rights reserved.