SQL SERVER 2005 Self присоединяется к выводу - PullRequest
0 голосов
/ 25 марта 2010

HI Я ищу какую-то помощь, я просто не могу понять, как себя объединяет работа. У меня есть этот код SQL

select Persno'Name',convert(char(20), A_Date , 13)'Logins',acode 
from atrail as LOGIN 
where acode = 'LOGIN' OR acode = 'LOGOUT'
order by a_date desc

Который создает список имен пользователей и когда они вошли и вышли. Я пытаюсь получить другой столбец с датой ВЫХОДА рядом с датой, когда они вошли в систему, чтобы было легче увидеть, когда они вошли в систему и вышли из нее.

Спасибо

Andy

Ответы [ 2 ]

2 голосов
/ 25 марта 2010

Это должно сделать это:

select      LOGIN.Persno  AS Name,
            LOGIN.a_date  AS login_date,    --//convert here as you like
            LOGOUT.a_date AS logout_date    --//convert here as you like

from        atrail as LOGIN

left join   atrail as LOGOUT
        ON  LOGOUT.Persno= LOGIN.Persno
        AND LOGOUT.acode = 'LOGOUT'

        AND LOGOUT.A_Date= (SELECT  TOP 1 x.A_Date
                            FROM    atrail x
                            WHERE   x.Persno = LOGIN.Persno
                                AND x.A_Date >= LOGIN.A_Date
                                AND x.acode = 'LOGOUT'
                            ORDER BY x.A_Date)
where       LOGIN.acode = 'LOGIN' 
order by    LOGIN.a_date desc

Будет выдавать результаты в формате:

Name        login_date  logout_date
----------- ----------- -----------
pippo       2008-01-01  2008-01-03
0 голосов
/ 10 сентября 2011

Это может быть еще один способ добиться этого:

SELECT Name, [LOGIN] as login_date, [LOGOUT] as logout_date
FROM
(
    SELECT Persno Name,convert(char(20), A_Date , 13) Logins, acode
    FROM atrail 
    WHERE acode = 'LOGIN' OR acode = 'LOGOUT'
    ORDER BY a_date DESC
) AS login_table
PIVOT
(
    MAX(Logins) FOR acode IN ([LOGIN],[LOGOUT])
) AS pvt_table
ORDER BY login_date DESC

Это с учетом того, что для каждой даты входа в систему существует дата выхода из системы и что для каждого человека существует только один вход в систему и одна строка выхода из системы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...