从 2 个表中删除查询中的重复结果 | SQL 服务器 2012
Removing duplicate results in a query from 2 tables | SQL SERVER 2012
我可以寻求有关此查询的帮助吗? physicianmasterfile.idno
和 CHECKINOUT.userid
具有相同的值,将在其中比较数据。问题是查询有重复的结果。
SELECT DISTINCT CHECKINOUT.CHECKTIME,
physicianmasterfile.idno,
physicianmasterfile.lastname,
physicianmasterfile.firstname,
physicianmasterfile.middlename,
physicianmasterfile.fingerscanno,
CONVERT(DATE, CHECKINOUT.CHECKTIME) AS Date,
CONVERT(TIME(0),CHECKINOUT.CHECKTIME) AS Time
FROM
physicianmasterfile,
CHECKINOUT
WHERE
CHECKINOUT.userid=physicianmasterfile.fingerscanno AND
CONVERT(DATE, CHECKINOUT.CHECKTIME) = CONVERT(DATE, SYSDATETIME()) AND
YEAR(CHECKINOUT.CHECKTIME) = YEAR(SYSDATETIME()) AND
CHECKINOUT.CHECKTYPE='I'
ORDER BY CHECKINOUT.CHECKTIME
我知道 UNION
会解决这个问题,但我不确定如何处理这个问题,因为 physicianmasterfile
有多个列需要包含在查询中,并且 CHECKINOUT
我只需要 1 列。
这是上述查询的示例数据。
不应有重复的结果。
这是我目前得到的结果,但运气不好。
SELECT distinct R.idno, R.lastname, R.firstname, R.middlename, R.fingerscanno,
LD.CHECKTIME, LD.CHECKTYPE,LD.USERID
FROM physicianmasterfile As R
LEFT JOIN CHECKINOUT AS LD on LD.USERID = R.fingerscanno
WHERE
CONVERT(DATE, LD.CHECKTIME) = CONVERT(DATE, SYSDATETIME()) AND
YEAR(LD.CHECKTIME) = YEAR(SYSDATETIME()) AND
LD.CHECKTYPE='I'
ORDER BY R.idno desc
编辑:
很抱歉造成混淆,我的意思是查询必须只显示每个名字、姓氏、中间名中的最新一个,例如:姓氏 ZZZZ 必须只显示 CHECKTIME 28:19.0 和 TIME: 5:28:19, lastname NNNN 必须只显示 CHECKTIME 57:06.0 和 TIME: 7:57:06.. 等等..
我没有看到您的所有数据,但请尝试将您的 FROM 和 WHERE 子句更改为:
FROM
physicianmasterfile LEFT JOIN CHECKINOUT ON
physicianmasterfile.fingerscanno = CHECKINOUT.userid
WHERE
CONVERT(DATE, CHECKINOUT.CHECKTIME) = CONVERT(DATE, SYSDATETIME()) AND
YEAR(CHECKINOUT.CHECKTIME) = YEAR(SYSDATETIME()) AND
CHECKINOUT.CHECKTYPE='I'
这个我没有测试过,所以我不知道它是否准确。
我可以寻求有关此查询的帮助吗? physicianmasterfile.idno
和 CHECKINOUT.userid
具有相同的值,将在其中比较数据。问题是查询有重复的结果。
SELECT DISTINCT CHECKINOUT.CHECKTIME,
physicianmasterfile.idno,
physicianmasterfile.lastname,
physicianmasterfile.firstname,
physicianmasterfile.middlename,
physicianmasterfile.fingerscanno,
CONVERT(DATE, CHECKINOUT.CHECKTIME) AS Date,
CONVERT(TIME(0),CHECKINOUT.CHECKTIME) AS Time
FROM
physicianmasterfile,
CHECKINOUT
WHERE
CHECKINOUT.userid=physicianmasterfile.fingerscanno AND
CONVERT(DATE, CHECKINOUT.CHECKTIME) = CONVERT(DATE, SYSDATETIME()) AND
YEAR(CHECKINOUT.CHECKTIME) = YEAR(SYSDATETIME()) AND
CHECKINOUT.CHECKTYPE='I'
ORDER BY CHECKINOUT.CHECKTIME
我知道 UNION
会解决这个问题,但我不确定如何处理这个问题,因为 physicianmasterfile
有多个列需要包含在查询中,并且 CHECKINOUT
我只需要 1 列。
这是上述查询的示例数据。
不应有重复的结果。
这是我目前得到的结果,但运气不好。
SELECT distinct R.idno, R.lastname, R.firstname, R.middlename, R.fingerscanno,
LD.CHECKTIME, LD.CHECKTYPE,LD.USERID
FROM physicianmasterfile As R
LEFT JOIN CHECKINOUT AS LD on LD.USERID = R.fingerscanno
WHERE
CONVERT(DATE, LD.CHECKTIME) = CONVERT(DATE, SYSDATETIME()) AND
YEAR(LD.CHECKTIME) = YEAR(SYSDATETIME()) AND
LD.CHECKTYPE='I'
ORDER BY R.idno desc
编辑:
很抱歉造成混淆,我的意思是查询必须只显示每个名字、姓氏、中间名中的最新一个,例如:姓氏 ZZZZ 必须只显示 CHECKTIME 28:19.0 和 TIME: 5:28:19, lastname NNNN 必须只显示 CHECKTIME 57:06.0 和 TIME: 7:57:06.. 等等..
我没有看到您的所有数据,但请尝试将您的 FROM 和 WHERE 子句更改为:
FROM
physicianmasterfile LEFT JOIN CHECKINOUT ON
physicianmasterfile.fingerscanno = CHECKINOUT.userid
WHERE
CONVERT(DATE, CHECKINOUT.CHECKTIME) = CONVERT(DATE, SYSDATETIME()) AND
YEAR(CHECKINOUT.CHECKTIME) = YEAR(SYSDATETIME()) AND
CHECKINOUT.CHECKTYPE='I'
这个我没有测试过,所以我不知道它是否准确。