SET TERM ^ ;
CREATE PROCEDURE OS_POB_SW_WG_WIEKU (
    ROK Integer )
RETURNS (
    OPIS Varchar(255),
    LICZBA_OS Integer,
    SRODKI_WLASNE Decimal(18,2),
    DOFINANSOWANIE Decimal(18,2) )
AS
DECLARE VARIABLE NA_DZIEN DATE;
			DECLARE VARIABLE DO_DNIA DATE; 
			DECLARE VARIABLE DATA_18_UR DATE; 
			DECLARE VARIABLE DATA_65_UR DATE;
			DECLARE VARIABLE DATA_60_UR DATE; 
			BEGIN
			    IF (ROK IS NULL) THEN SELECT EXTRACT(YEAR FROM CURRENT_DATE) FROM RDB$DATABASE INTO ROK;
			    SELECT CAST ('01' || '.01.' || :ROK AS DATE) FROM RDB$DATABASE INTO NA_DZIEN;
			    SELECT CAST ('31' || '.12.' || :ROK AS DATE) FROM RDB$DATABASE INTO DO_DNIA;
			    DATA_65_UR = DATEADD(-65 YEAR TO NA_DZIEN);
			    DATA_18_UR = DATEADD(-18 YEAR TO NA_DZIEN);
			    DATA_60_UR = DATEADD(-60 YEAR TO NA_DZIEN);
			    FOR 
			    SELECT 'mezczyzni po 65', COUNT(distinct(OSOBA.ID_OSOBY)), SUM(HARMONOGRAM.KWOTA) AS WLASNE, SUM(HARMONOGRAM.KWOTA_CENTRALNA) AS DOFINANSOWANIE
			    FROM swiadczenie 
			    JOIN harmonogram ON swiadczenie.id_swiadczenia = harmonogram.id_swiadczenia AND harmonogram.DATA_REALIZACJI >= :NA_DZIEN AND harmonogram.DATA_REALIZACJI < :DO_DNIA and (harmonogram.status IN ('2')) 
			    JOIN osoba ON osoba.id_osoby = swiadczenie.id_na_kogo AND OSOBA.DATA_UR < :DATA_65_UR and OSOBA.PLEC = 1 
			    JOIN osoba_rodzina ON osoba_rodzina.id_osoby = osoba.id_osoby AND osoba_rodzina.TYP IN (0,1,2) AND osoba_rodzina.PRZYNALEZNOSC_DO IS NULL 
			    JOIN rodzina ON osoba_rodzina.id_rodziny = rodzina.id_rodziny 
			    JOIN decyzja ON decyzja.id_decyzji = swiadczenie.id_decyzji 
			    LEFT JOIN wywiad wywiadDecyzja ON wywiadDecyzja.id_wywiadu = decyzja.id_wywiadu 
			    JOIN pozycja_listy ON pozycja_listy.id_harmonogramu = harmonogram.id_harmonogramu 
			    JOIN lista ON lista.id_listy = pozycja_listy.id_listy 
			    LEFT JOIN i_pr_usamodzielniania ON swiadczenie.id_programu_usamodzielniania = i_pr_usamodzielniania.id_programu
			    UNION 
			    SELECT 'kobiety po 60', COUNT(distinct(OSOBA.ID_OSOBY)), SUM(HARMONOGRAM.KWOTA) AS WLASNE, SUM(HARMONOGRAM.KWOTA_CENTRALNA) AS DOFINANSOWANIE 
			    FROM swiadczenie 
			    JOIN harmonogram ON swiadczenie.id_swiadczenia = harmonogram.id_swiadczenia AND harmonogram.DATA_REALIZACJI >= :NA_DZIEN AND harmonogram.DATA_REALIZACJI < :DO_DNIA AND (harmonogram.status IN ('2')) 
			    JOIN osoba ON osoba.id_osoby = swiadczenie.id_na_kogo AND OSOBA.DATA_UR < :DATA_60_UR and OSOBA.PLEC = 2 
			    JOIN osoba_rodzina ON osoba_rodzina.id_osoby = osoba.id_osoby AND osoba_rodzina.TYP IN (0,1,2) AND osoba_rodzina.PRZYNALEZNOSC_DO IS NULL 
			    JOIN rodzina ON osoba_rodzina.id_rodziny = rodzina.id_rodziny 
			    JOIN decyzja ON decyzja.id_decyzji = swiadczenie.id_decyzji 
			    LEFT JOIN wywiad wywiadDecyzja ON wywiadDecyzja.id_wywiadu = decyzja.id_wywiadu 
			    JOIN pozycja_listy ON pozycja_listy.id_harmonogramu = harmonogram.id_harmonogramu 
			    JOIN lista ON lista.id_listy = pozycja_listy.id_listy 
			    LEFT JOIN i_pr_usamodzielniania ON swiadczenie.id_programu_usamodzielniania = i_pr_usamodzielniania.id_programu 
			    UNION 
			    SELECT 'kobiety przed 18', COUNT(distinct(OSOBA.ID_OSOBY)), SUM(HARMONOGRAM.KWOTA) AS WLASNE, SUM(HARMONOGRAM.KWOTA_CENTRALNA) AS DOFINANSOWANIE 
			    FROM swiadczenie 
			    JOIN harmonogram ON swiadczenie.id_swiadczenia = harmonogram.id_swiadczenia AND harmonogram.DATA_REALIZACJI >= :NA_DZIEN AND harmonogram.DATA_REALIZACJI < :DO_DNIA AND (harmonogram.status in ('2')) 
			    JOIN osoba ON osoba.id_osoby = swiadczenie.id_na_kogo AND OSOBA.DATA_UR > :DATA_18_UR AND OSOBA.PLEC = 2 
			    JOIN osoba_rodzina ON osoba_rodzina.id_osoby = osoba.id_osoby AND osoba_rodzina.TYP IN (0,1,2) AND osoba_rodzina.PRZYNALEZNOSC_DO IS NULL 
			    JOIN rodzina ON osoba_rodzina.id_rodziny = rodzina.id_rodziny 
			    JOIN decyzja ON decyzja.id_decyzji = swiadczenie.id_decyzji 
			    LEFT JOIN wywiad wywiadDecyzja ON wywiadDecyzja.id_wywiadu = decyzja.id_wywiadu 
			    JOIN pozycja_listy ON pozycja_listy.id_harmonogramu = harmonogram.id_harmonogramu 
			    JOIN lista ON lista.id_listy = pozycja_listy.id_listy 
			    LEFT JOIN i_pr_usamodzielniania ON swiadczenie.id_programu_usamodzielniania = i_pr_usamodzielniania.id_programu 
			    UNION 
			    SELECT 'mezczyzni przed 18', COUNT(distinct(OSOBA.ID_OSOBY)), SUM(HARMONOGRAM.KWOTA) AS WLASNE, SUM(HARMONOGRAM.KWOTA_CENTRALNA) AS DOFINANSOWANIE 
			    FROM swiadczenie 
			    JOIN harmonogram ON swiadczenie.id_swiadczenia = harmonogram.id_swiadczenia AND harmonogram.DATA_REALIZACJI >= :NA_DZIEN AND harmonogram.DATA_REALIZACJI < :DO_DNIA and (harmonogram.status in ('2')) 
			    JOIN osoba ON osoba.id_osoby = swiadczenie.id_na_kogo AND OSOBA.DATA_UR > :DATA_18_UR AND OSOBA.PLEC = 1 
			    JOIN osoba_rodzina ON osoba_rodzina.id_osoby = osoba.id_osoby AND osoba_rodzina.TYP IN (0,1,2) AND osoba_rodzina.PRZYNALEZNOSC_DO IS NULL 
			    JOIN rodzina ON osoba_rodzina.id_rodziny = rodzina.id_rodziny 
			    JOIN decyzja ON decyzja.id_decyzji = swiadczenie.id_decyzji 
			    LEFT JOIN wywiad wywiadDecyzja ON wywiadDecyzja.id_wywiadu = decyzja.id_wywiadu 
			    JOIN pozycja_listy ON pozycja_listy.id_harmonogramu = harmonogram.id_harmonogramu 
			    JOIN lista ON lista.id_listy = pozycja_listy.id_listy 
			    LEFT JOIN i_pr_usamodzielniania ON swiadczenie.id_programu_usamodzielniania = i_pr_usamodzielniania.id_programu 
			    UNION 
			    SELECT 'mezczyzni miÄ™dzy 18 a 65', COUNT(distinct(OSOBA.ID_OSOBY)), SUM(HARMONOGRAM.KWOTA) AS WLASNE, SUM(HARMONOGRAM.KWOTA_CENTRALNA) AS DOFINANSOWANIE
			    FROM swiadczenie 
			    JOIN harmonogram on swiadczenie.id_swiadczenia = harmonogram.id_swiadczenia and harmonogram.DATA_REALIZACJI >= :NA_DZIEN and harmonogram.DATA_REALIZACJI < :DO_DNIA and (harmonogram.status in ('2')) 
			    JOIN osoba ON osoba.id_osoby = swiadczenie.id_na_kogo AND OSOBA.DATA_UR BETWEEN :DATA_65_UR AND :DATA_18_UR and OSOBA.PLEC = 1 
			    JOIN osoba_rodzina ON osoba_rodzina.id_osoby = osoba.id_osoby AND osoba_rodzina.TYP IN (0,1,2) AND osoba_rodzina.PRZYNALEZNOSC_DO IS NULL 
			    JOIN rodzina ON osoba_rodzina.id_rodziny = rodzina.id_rodziny 
			    JOIN decyzja ON decyzja.id_decyzji = swiadczenie.id_decyzji 
			    LEFT JOIN wywiad wywiadDecyzja ON wywiadDecyzja.id_wywiadu = decyzja.id_wywiadu 
			    JOIN pozycja_listy ON pozycja_listy.id_harmonogramu = harmonogram.id_harmonogramu 
			    JOIN lista ON lista.id_listy = pozycja_listy.id_listy 
			    LEFT JOIN i_pr_usamodzielniania ON swiadczenie.id_programu_usamodzielniania = i_pr_usamodzielniania.id_programu 
			    UNION 
			    SELECT 'kobiety po miÄ™dzy 18 a 60', COUNT(distinct(OSOBA.ID_OSOBY)), SUM(HARMONOGRAM.KWOTA) AS WLASNE, SUM(HARMONOGRAM.KWOTA_CENTRALNA) AS DOFINANSOWANIE
			    FROM swiadczenie 
			    JOIN harmonogram ON swiadczenie.id_swiadczenia = harmonogram.id_swiadczenia AND harmonogram.DATA_REALIZACJI >= :NA_DZIEN AND harmonogram.DATA_REALIZACJI < :DO_DNIA AND (harmonogram.status in ('2')) 
			    JOIN osoba ON osoba.id_osoby = swiadczenie.id_na_kogo and OSOBA.DATA_UR BETWEEN :DATA_60_UR AND :DATA_18_UR AND OSOBA.PLEC = 2 
			    JOIN osoba_rodzina ON osoba_rodzina.id_osoby = osoba.id_osoby AND osoba_rodzina.TYP IN (0,1,2) AND osoba_rodzina.PRZYNALEZNOSC_DO IS NULL 
			    JOIN rodzina ON osoba_rodzina.id_rodziny = rodzina.id_rodziny 
			    JOIN decyzja ON decyzja.id_decyzji = swiadczenie.id_decyzji 
			    LEFT JOIN wywiad wywiadDecyzja ON wywiadDecyzja.id_wywiadu = decyzja.id_wywiadu 
			    JOIN pozycja_listy ON pozycja_listy.id_harmonogramu = harmonogram.id_harmonogramu 
			    JOIN lista ON lista.id_listy = pozycja_listy.id_listy 
			    LEFT JOIN i_pr_usamodzielniania ON swiadczenie.id_programu_usamodzielniania = i_pr_usamodzielniania.id_programu 
			    INTO OPIS, LICZBA_OS, SRODKI_WLASNE, DOFINANSOWANIE
			    DO SUSPEND;
			END^
SET TERM ; ^