【发布时间】:2014-08-14 08:43:01
【问题描述】:
SELECT USERINFO.UserID
,SUM(DATEDIFF(DAY, DateFrom, DateTo) + 1) AS total_leave_days
FROM USERINFO
INNER JOIN CHECKINOUT ON USERINFO.USERID = CHECKINOUT.USERID
LEFT OUTER JOIN DEPARTMENTS ON DEPARTMENTS.DEPTID = USERINFO.DEFAULTDEPTID
left join AuthLeave on AuthLeave.userid = userinfo.userid
and AuthLeave.DATEFROM>='2014-01-01'
and AuthLeave.DATETO<='2014-06-30'
WHERE (CHECKINOUT.CHECKTIME >= '2014-01-01')
AND (CHECKINOUT.CHECKTIME <= '2014-06-30')
AND DEPARTMENTS.DEPTNAME = 'GEN/SUP-TBL'
GROUP BY USERINFO.UserID
这是我的代码,我可以在下面输出
UserID total_leave_days
35 NULL
350 NULL
30 NULL
10 735
167 NULL
21 920
1 621
224 NULL
所以下面是我的 Authleave 表数据不正确:
UserID DATEFROM DATETO
1 2014-03-10 2014-03-15
10 2014-05-28 2014-05-29
21 2014-05-27 2014-05-27
1 2014-04-10 2014-04-15
从现在开始我想要如下输出:
UserID total_leave_days
35 NULL
350 NULL
30 NULL
10 2
167 NULL
21 1
1 12
224 NULL
那我该怎么做呢?
【问题讨论】:
-
将
left join AuthLeave on AuthLeave.userid = userinfo.userid更改为inner join AuthLeave on AuthLeave.userid = userinfo.userid -
不,它不工作..
-
这个左连接应该在你的左外连接之上...
-
你确定
CHECKINOUT中每个用户ID 没有更多的行吗?这可能会导致更高的数字。你能发布所有涉及的表的 DDL 吗? -
CHECKINOUT和DEPARTMENTS的样表呢?如果可能的话,你应该尝试制作一些sqlfiddle demo
标签: sql sql-server sql-server-2008 sql-server-2005