select wyciągający dwa poziomy grupowania w jednym zapytaniu

0

Witam. Używam silnika firebird, ale w wersji 2.5. Potrzebuję napisać zapytanie, które wyciągnie mi w tym jednym zapytaniu dwa poziomy grupowania. W Firebird 3.0 można korzystać z funkcji analitycznych, jednak na fb 2.5 nie ma takiej możliwości, stąd mój problem. Do rzeczy:
Muszę wyciągnąć numery kadrowe pracowników, id etatu, id płatnika, ale tylko pracowników z więcej niż jednym etatem u więcej niż jednego płatnika.
Mam takie dwa cząstkowe zapytania

  1. select wyciągający powyższe dane dla pracowników z więcej niż jednym etatem:
select C.ETAT_IDKADR, C.ETAT_ID, C.ETAT_PLATNIK, ILOSC
from PL_REJ_ETATY C
join(select B.ETAT_IDKADR as ETAT_IDKADR, count(B.ETAT_ID) as ILOSC
     from PL_REJ_ETATY B
     group by 1
     having count(ETAT_ID) > 1) on C.ETAT_IDKADR = ETAT_IDKADR;

i jego wyniki:

screenshot-20210110223138.png

  1. select wyciągający powyższe dane z podaniem ilości etatów przypadających na płatnika, ale bez podania ilości etatów ogółem:
select distinct c.ETAT_IDKADR, C.ETAT_ID, C.ETAT_PLATNIK, ILOSC
from PL_REJ_ETATY C
join(select B.ETAT_IDKADR as ETAT_IDKADR, B.ETAT_PLATNIK, count(B.ETAT_ID) as ILOSC
     from PL_REJ_ETATY B
     group by 1, 2) on C.ETAT_IDKADR = ETAT_IDKADR;

i jego wyniki:
screenshot-20210110224615.png

I teraz najważniejsze do zrozumienia problemu:
na pierwszym zrzucie jest zaznaczony etat_idkadr 14, który w kolumnie ilosc ma wartość 2, co oznacza, że ma 2 etaty.
Natomiast na drugim ten sam etat_id kadr ma w kolumnie ilosc, wartość 1, co oznacza na każdego z płatników (1 i 10) przypada po jednym etacie.
I teraz mi chodzi o to, żeby napisać takiego selecta, który wyciągnie tylko takie przypadki jak etat_id kadr = 14, czyli posiadają więcej niż jeden etat u więcej niż jednego płanika.

1

Inner join tych dwóch zapytań...

0

@Fac:
Dzięki za odpowiedź, Rzeczywiście zadziałało.

1 użytkowników online, w tym zalogowanych: 0, gości: 1