Strona 1 z 1

Filtr dokumenty handlowe - załączniki dwa lub więcej

: 20 sie 2025, 11:41
autor: Kris86
Witam,
potrzebował bym filtr który zwróci mi na liście dokumentów, dokumenty FS - które mają dwa lub więcej załączników.

Dziękuję za pomoc

Re: Filtr dokumenty handlowe - załączniki dwa lub więcej

: 20 sie 2025, 14:13
autor: praiser

Kod: Zaznacz cały

Trn_GidNumer IN (
   SELECT Trn_GidNumer
   FROM CDN.TraNag
   join CDN.DaneObiekty on TrN_GIDNumer=DAO_ObiNumer and DAO_ObiTyp=Trn_GidTyp
   GROUP BY TrN_GidNumer
   HAVING COUNT(DaO_ObiNumer) > 1
)

Re: Filtr dokumenty handlowe - załączniki dwa lub więcej

: 03 paź 2025, 10:07
autor: Kris86
Potrzebuję teraz filtrować te dokumenty, które nie mają załącznika.
Próbowałem przebudować powyższy kod operatorem NOT EXISTS () z WHERE ale nie pomogło.
Rozumiem że tutaj klauzula HAVING z COUNT() nie ma zastosowania?

Jak wyglądałby taki kod?
Dziękuję za wszelką pomoc.

Re: Filtr dokumenty handlowe - załączniki dwa lub więcej

: 03 paź 2025, 11:13
autor: praiser
można zamienić IN na NOT IN już bez grupowania i warunków having bo pełny join sprawdzi czy w ogóle istnieje powiązanie
ale lepiej użyć not exists, powinno być szybsze (i bezpieczniejsze przy NULL-ach)

Kod: Zaznacz cały

NOT EXISTS (
   SELECT 1
   FROM CDN.DaneObiekty
   WHERE DAO_ObiNumer = Trn_GidNumer 
     AND DAO_ObiTyp = Trn_GidTyp
)

Re: Filtr dokumenty handlowe - załączniki dwa lub więcej

: 03 paź 2025, 11:32
autor: Kris86
praiser pisze:
03 paź 2025, 11:13
można zamienić IN na NOT IN już bez grupowania i warunków having bo pełny join sprawdzi czy w ogóle istnieje powiązanie
ale lepiej użyć not exists, powinno być szybsze (i bezpieczniejsze przy NULL-ach)

Kod: Zaznacz cały

NOT EXISTS (
   SELECT 1
   FROM CDN.DaneObiekty
   WHERE DAO_ObiNumer = Trn_GidNumer 
     AND DAO_ObiTyp = Trn_GidTyp
)
Pomogło bez NOT EXISTS

Kod: Zaznacz cały

Trn_GidNumer NOT IN (
   SELECT Trn_GidNumer
   FROM CDN.TraNag
   join CDN.DaneObiekty on TrN_GIDNumer=DAO_ObiNumer and DAO_ObiTyp=Trn_GidTyp
)