[MSSQL] godzina wejścia i wyjścia - spłaszczenie

0

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ć

0

To będzie wyglądać -= tak:SELECT data, id, (SELECT Min(date) FROM tabela WHERE kierunek='WE' and data = t.data and id=t.id) WE, (SELECT MAX(date) FROM tabela WHERE kierunek='WY' and data = t.data and id=t.id) WY FROM tabela t

pozdrawiaMM

0

No nie, jest to samo

0
SELECT X.date,
           X.ID,
           X.WE,
           X.WY
FROM
(
  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 
) AS X
ORDER BY X.date

To powinno dzialac

1 użytkowników online, w tym zalogowanych: 0, gości: 1