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
- 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:
- 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:
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.