OK, mam taką sytuację.
Mam tabelę, w której są informacje o odbiciach na czytnikach na palec.
Te informacje to:
data i czas, id pracownika, id czytnika i inne nieistotne
Mam również napisaną funkcję, która sprawdza, czy dany czytnik jest ustawiony jako wejściowy, czy wyjściowy, przykładowe wywołanie:
dbo.getDirection('WE', 'WY', 1025)
gdzie, 'WE' - to jest string, który funkcja ma zwrócić, jeśli czytnik jest wejściowy(analogicznie z WY), 1025 to id czytnika.
Teraz muszę uzyskać następujące wyniki:
Data, ID, Czas_wejścia, Czas_wyjścia
pamiętając o tym, że pracownik moze mieć kilka wejść i wyjść w jednym dniu.
Moje zapytanie wygląda tak:
select date, ID,
(case when dbo.getDirection('WE', 'WY', deviceID) = 'WE' then
dbo.get_time(date) else '-' end) as WE,
(case when dbo.getDirection('WE', 'WY', deviceID) = 'WY' then
dbo.get_time(date) else '-' end) as WY
from tabela
order by date
Rezultatem takiego zapytania jest np:
Data ID WE WY
2008-09-01 1 09:00 -
2008-09-01 1 - 10:00
...
A ja chcę otrzymać coś takiego
Data ID WE WY
2008-09-01 1 09:00 10:00
Ale nie mam pojęcia, jak to mogę spłaszczyć.
Myślałem nad kolejną funkcją, która zwróci mi następne odbicie, ale wtedy dostałbym to samo w następnym rekordzie :/
Jest jeszcze jedna ważna sprawa. Otóż odbicia mogą być niepoprawne.
Np: poprawne to: we-wy-we-wy
niepoprawne: we-we-wy
i o tym też trzeba pamiętać