Twoje zapytanie wrzucam do osobnego bloku, żeby się odciąć od tego co robi, a skupić tylko na części technicznej, tj.
- podzieleniu zbioru na grupy (po numer_paczki)
- ponumerowaniu rekordów w ramach grupy (te, które mają wartość >0 ustawiam wcześniej, a te z wartością = 0, później)
- wyborze pierwszego rekordu z grupy (jak będzie tylko 1 rekord, to wybierze jeden, jak będzie więcej rekordów, to wybierze jakiś z wartością > 0)
WITH tableka AS (
/* TWOJE ZAPYTANIE */
)
SELECT
NUMBER_PACZKI,
WARTOSC
FROM
(
SELECT
ROW_NUMBER() OVER (PARTITION BY NUMBER_PACZKI ORDER BY CASE WHEN NUMER_PACZUSZKI>0 THEN 0 ELSE 1 END) RN,
NUMBER_PACZKI,
NUMER_PACZUSZKI
FROM
TABELKA
) T WHERE RN=1;
Nie napisałeś jaki to silnik, więc założyłem, że są w nim dostępne funkcje analityczne ;-) Tu wykorzystana jest ROW_NUMBER().