我有一个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,因为有两个重复的条形码扫描约翰史密斯同一天。
发布于 2017-10-30 23:35:34
示例查询不能工作的原因是您没有按名称删除重复项。要做到这一点,您必须根据select语句中的所有内容使用具有名称或组的不同值。例如,子查询EVENTDATE、NAME、条形码的不同组合以删除重复项,然后按事件日期对条形码进行计数。
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 发布于 2017-10-30 21:25:11
只需计算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
发布于 2017-10-30 21:21:28
也许你只是想:
select EVENTDATE, NAME, count(DISTINCT BARCODE) as cnt
from TIMESHEET
where EVENTDATE = '27-OCT-17'
group by EVENTDATE, NAME
order by EVENTDATE, NAME;https://stackoverflow.com/questions/47024310
复制相似问题