我有一个SQL表格,显示扫描条形码的人的姓名。 他们经常每天扫描到多个条形码,有时在同一天扫描相同的代码。 我需要计算每个人每天的扫描类型数量。 我遇到的问题是我不想每天为一个人计算相同的条形码值。
以下是SQL表的示例。
这是我的SQL
SELECT EVENTDATE, BARCODE, count(BARCODE) AMOUNT
from TIMESHEET
where EVENTDATE = '27-OCT-17'
group by EVENTDATE, BARCODE
order by EVENTDATE, BARCODE
结果给我的数量为5,但我只想要4,因为同一天有两个重复的条形码扫描为JOHN SMITH。
答案 0 :(得分:2)
请改为计算DISTINCT
名称。
SELECT EVENTDATE, BARCODE, count(DISTINCT NAME) AMOUNT
from TIMESHEET
where EVENTDATE = '27-OCT-17'
group by EVENTDATE, BARCODE
order by EVENTDATE, BARCODE;
但是你应该使用一些name_id
而不是name
,因为你可以有两个人名Jhon Smith
答案 1 :(得分:1)
也许你只是想要:
select EVENTDATE, NAME, count(DISTINCT BARCODE) as cnt
from TIMESHEET
where EVENTDATE = '27-OCT-17'
group by EVENTDATE, NAME
order by EVENTDATE, NAME;
答案 2 :(得分:0)
示例查询不起作用的原因是您没有按名称删除重复项。要执行此操作,您必须使用select语句中的所有内容使用名称或组来获取不同的值。例如,子查询EVENTDATE,NAME,BARCODE的不同组合以删除重复项 - 然后按eventdate计算条形码。
SELECT dT.EVENTDATE
,dT.BARCODE
,COUNT(dT.BARCODE) AS TOTAL
FROM (
SELECT DISTINCT EVENTDATE, NAME, BARCODE
FROM TIMESHEET
--WHERE EVENTDATE = '2017-10-27' --if you really need to filter by date
--otherwise will group by all dates
) AS dT
GROUP BY dT.EVENTDATE
,dT.BARCODE