= Przykłady SQL do raportów = == Użyteczne konstrukcje i funkcje językowe SQL == {{{ --Formatuje datę SELECT to_char(d.adddat, 'YYYY-MM-DD') FROM documents d; -- Pobiera rok select extract(YEAR from CURRENT_DATE); -- Oblicza czas który upłynął od daty do daty (np. na realizacji zadania) ((extract(EPOCH FROM d.rlend_) - extract(EPOCH FROM d.rlstrt))/3600)::numeric(12,2) AS duration -- Zamienia liczbę sekund na ciąg: H:M:S - np. 00:30:03 SELECT (1803 || 's')::interval -- Formatuje kwotę z pól tekstowych np. z formularzy customowych select cast(regexp_replace(regexp_replace('301 110,43',' ',''),',', '.') as numeric(12,2)) + 12.50; -- Warunkowo koloruje pole CASE WHEN p.pr_sta = 1 THEN '
Rozpoczęte
' WHEN p.pr_sta = 2 THEN 'W trakcie realizacji' WHEN p.pr_sta = 3 THEN 'Zakończone' END AS status, -- Wybiera te rekordy których data jest w tym tugodniu to_char(CURRENT_DATE, 'WW') = to_char (adddat, 'WW') -- wybiera rekordy nie starsze niż miesiąc AND dcr.adddat > CURRENT_DATE - interval '1 month' }}} == Przykładowe użyteczne zapytania do bazy edokumenty == {{{ -- Pobranie danych z formularzy dynamicznych SELECT to_char(d.adddat, 'YY-MM-DD') AS day, rozmowy (SELECT count(*) /10 FROM events_view e WHERE e.trmtyp = 'PHONECALL' AND emp_id IN (84,62) AND e.start_ >= d.adddat::date - 7 AND e.start_ <= d.adddat) AS rozmowy_handlowe, spotkania (SELECT count(*) FROM events_view e WHERE e.trmtyp = 'MEETING' AND emp_id IN (84,62) AND e.start_ >= d.adddat::date - 7 AND e.start_ <= d.adddat) AS spotkania, wartość pola featid 98 f3.data__::int AS odwedok, f4.ftopnm AS cecha4 FROM documents d INNER JOIN features_text_view f3 ON d.doc_id = f3.tbl_id AND f3.featid = 98 cecha z listy wyboru INNER JOIN features_opt_view f4 ON d.doc_id = f4.tbl_id AND f4.ftopid = 119 WHERE d.is_del IS NOT true AND d.gostof IS NULL -- Wybiera symbol teczki z numeru sprawy oo formacie ''2/03/08/UP/AW'' SELECT substring(symbol from '[0-9]*/[0-9]*/[0-9]*/([A-Z]*)') FROm processes; -- Wybiera krótką nazwę klienta jeśli jest, a jeśli jest pusta to długą SELECT COALESCE(c.name_2, c.name_1) FROM contacts c; Wybiera sprawy z wartościami cech (tekstowe i opcje) SELECT p.dscrpt, p.symbol, 'PROCESS'::text AS clsnam, prc_id AS keyval, f1.data__ AS opinia, f2.ftopnm AS reklamacja, f3.data__ AS dzialanie_korygujace, f4.data__ AS dzialanie_Klient, f5.data__ AS przyczyna FROM processes_view p LEFT JOIN features_text_view f1 ON p.prc_id = f1.tbl_id AND f1.featid = 14 LEFT JOIN features_opt_view f2 ON p.prc_id = f2.tbl_id AND f2.featid = 15 LEFT JOIN features_text_view f3 ON p.prc_id = f3.tbl_id AND f3.featid = 16 LEFT JOIN features_text_view f4 ON p.prc_id = f4.tbl_id AND f4.featid = 17 LEFT JOIN features_text_view f5 ON p.prc_id = f5.tbl_id AND f5.featid = 18 WHERE p.prtpid = 1 -- Wybiera dane do trendu - do wykresu SELECT extract(month from rlstrt) as m, sum((time__::numeric(12,2)/3600)::numeric(12,2)) AS sum FROM rcp_cards_view WHERE rlstrt IS NOT NULL AND is_fak = TRUE AND is_del = FALSE AND tpstid = 9 AND rlstrt + interval '1 year' >= CURRENT_DATE GROUP BY extract(year from rlstrt), extract(month from rlstrt) ORDER BY extract(year from rlstrt), extract(month from rlstrt) }}}