mojaSymfonia FORUM
https://forum.mix-soft.pl/

ID z bazy danych aktywnych kont
https://forum.mix-soft.pl/viewtopic.php?f=16&t=9993
Strona 1 z 1

Autor:  Lnyga [ 2021-07-14, 11:50 ]
Tytuł:  ID z bazy danych aktywnych kont

witam
OD jakiegoś czasu próbuję napisać query do wyświetlenia wszystkich ID z bazy pracowników z podziałem na status (lub coś co pozwoli na rozróżnienie pracowników)
Generalnie chodzi mi o zestawienie wszystkich ID z info:

| ID pracownika | Status |
|----------------------------------------------------------------|
| 434134 | ok |
| 234123 | wypowiedzenie umowy |
| 213412 | nie pracuje |



z góry dziękuję
pozdrawiam
L

Autor:  Lnyga [ 2021-07-16, 14:32 ]
Tytuł:  Re: ID z bazy danych aktywnych kont

Znalazłem rozwiązanie:

use [SAGE_KIP]
SELECT
I.[employee_id]
,case
when max(R.end_date) <= getdate() then 0
when datediff(day, getdate(), max(R.end_date)) < 90 then -1
when max(R.end_date) >= getdate() then 1
end as is_active
FROM [KD].[HRV_ITEMS] I
left join [KD].[HRV_ROWS] R on R.id = I.row_id
where I.definition_id = (select id from [KD].[SKLADNIKI] where nazwa = 'data zakończenia pracy')
group by I.employee_id


w zapytaniu zastosowałem składnię z nazwy dla ułatwienia uzyskania id składnika (select id from [SAGE_COI_KIP].[KD].[SKLADNIKI] where nazwa = 'data zakończenia pracy')
w taki sposób zamiast wpisywać ID pozycji (w moim przypadku jest to 8513) użyłem opcji wyszukania id pozycji po nazwie, czyli nie trzeba znać id z symfonii danego składnika a jedynie jego nazwę (to rozwiązanie sprawdza się przy innych zaawansowanych zapytaniach)

wynik zapytania wyświetlany jest w dwóch kolumnach: employee_id oraz is_active
przy czym:
0 = pracownik już nie pracuje
1 = pracownik nadal jest zatrudniony
-1 = niedługo umowa wygaśnie, zbliża się termin umowy

|...20978.....|..0..|
|...20979.....|..1..|
|...20980.....|..0..|
|...20981.....|..1..|
|...20982.....|.-1..|
|...20983.....|..0..|
|...20984.....|..1..|
|...20985.....|..0..|
|...20986.....|.-1..|
|...20987.....|..1..|


usuwając tą linię z zapytania
when datediff(day, getdate(), max(R.end_date)) < 90 then -1
widok będzie zawierał listę aktywnych i nie aktywnych pracowników, czyli tylko 0 i 1

Teraz już jest z górki :-D
do tego widoku można podłączyć imiona i nazwiska. No i powstała piękna lista pracowników, teraz można założyć dodatkowy filtr pokazujący tylko pracowników z parametrem 1 dla is_active lub dopisać do where: and R.end_date >= getdate()

Strona 1 z 1 Strefa czasowa UTC+1godz. [letni]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/