日期:2014-05-18  浏览次数:20879 次

请教一个多表查询的问题!!!
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,password

sign
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,null

2007-07-03,1,a,2007-07-03
2007-07-03,2,b,null
2007-07-03,3,c,null

2007-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

----------------------------------------
请大侠们指教!!


------解决方案--------------------
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
------解决方案--------------------
呵呵,把原来的表的结构修改了?