我想显示只剩下一个项目的所有位置。尝试使用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
你可以使用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
假设数量从不为负或为零,那么这应该有效:
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)
上的条件。