SQLSERVER的数据库
说明:一个签到系统,2张表1个为user表,另一个为sign表
user (id,username,password,name,power)
sign (id, userid,signTime)
签一次到向sign表插入一条数据
我的问题:
我想查询 2007-07-02 到 2007-07-30 签到记录
条件是,
按每一天来分组显示,每一组把user表所有的用户和用户签到信息都列出来,显示这个用户的用户名和这一天的签到时间(有的用户可能有一天没签到 但也要显示出用户名username,只是不显示signtime的值) 
--------------------------------------------
得到的结果类似这样的
是不是要这样
user
1,a,password
2,b,password
3,c,passwordsign
1,aid,2007-07-03
3,cid,2007-07-05结果
2007-07-02,1,a,null
2007-07-02,2,b,null
2007-07-02,3,c,null2007-07-03,1,a,2007-07-03
2007-07-03,2,b,null
2007-07-03,3,c,null2007-07-04,1,a,null
...
2007-07-05,1,a,null
2007-07-05,2,b,null
2007-07-05,3,c,2007-07-05----------------------------------------
请大侠们指教!!

解决方案 »

  1.   

    SELECT C.D, C.id, E.username, D.signTime
    FROM
    (SELECT * FROM
    (SELECT DISTINCT CONVERT(CHAR(10), signTime, 111) AS D  FROM sign) A
    CROSS JOIN (SELECT id FROM user) B) C
    INNER JOIN user E ON C.id = E.id
    LEFT OUTER JOIN(
    SELECT U.id, U.username, S.signTime
    FROM user U
    LEFT JOIN sign S ON U.id = S.userid)D ON C.id = D.id AND C.D = CONVERT(CHAR(10), D.signTime, 111)
    ORDER BY C.D, C.id