表名: abc  name (姓名)   flag (标志 0为登陆 1为退出)   time (时间)name       flag      time
123         0         2008-01-01 14:22:30
fgh         0         2008-02-01 15:32:15
fg          1         2008-03-01 12:12:12
123         1         2008-01-01 15:35:59使用一条sql语句  查询出如下结果
姓名      登陆   时间                          退出     时间
123      登陆  2008-01-01 14:22:30        退出     2008-01-01 15:35:59
fgh      登陆  2008-02-01 15:32:15
.         .
.         .
.         .或者   查询出这样的结果也行使用一条sql语句  查询出如下结果
姓名      登陆   时间                          退出     时间
123      登陆  2008-01-01 14:22:30        
123                                      退出     2008-01-01 15:35:59
fgh      登陆  2008-02-01 15:32:15
.         .
.         .
不想 使用  select * from abc 
然后再  逐条判断输出(如果有上万条 岂不很慢)

解决方案 »

  1.   

    表名: abc   name (姓名)   flag (标志 0为登陆 1为退出)   time (时间) name       flag      time 
    123         0         2008-01-01 14:22:30 
    fgh         0         2008-02-01 15:32:15 
    fg          1         2008-03-01 12:12:12 
    123         1         2008-01-01 15:35:59 
    -----------------------------------------------------
    select name ,
    max(case flag when 0 then time end) 登陆时间,
    max(case flag when 1 then time end) 退出时间
    from abc
    group by nameselect name ,
    '登陆' 登陆,
    max(case flag when 0 then time end) 登陆时间,
    '退出' 退出,
    max(case flag when 1 then time end) 退出时间
    from abc
    group by name