Sql 将不同计数与datepart(天)相加

Sql 将不同计数与datepart(天)相加,sql,sql-server,sql-server-2008-r2,distinct,Sql,Sql Server,Sql Server 2008 R2,Distinct,这是我的问题。这是一家日光浴沙龙,我们最近增加了水疗服务。客户过去一天只晒一次太阳,所以按员工统计不同的客户非常容易。现在,他们一天中晒太阳/做温泉不止一次,在任何一天都能见到不同的员工。我正试图将每天的客户数量总和为一个数字。这是问题所在。我希望这是有意义的。请原谅我第一次发帖 此查询将生成他们每天进来的不同客户的计数,以及哪个员工将他们晒黑。这是正确的,我只需要按员工对其进行汇总。如果我不包括日期部分,它会为整个日期范围选择distinct SELECT COUNT(DISTINCT C

这是我的问题。这是一家日光浴沙龙,我们最近增加了水疗服务。客户过去一天只晒一次太阳,所以按员工统计不同的客户非常容易。现在,他们一天中晒太阳/做温泉不止一次,在任何一天都能见到不同的员工。我正试图将每天的客户数量总和为一个数字。这是问题所在。我希望这是有意义的。请原谅我第一次发帖

此查询将生成他们每天进来的不同客户的计数,以及哪个员工将他们晒黑。这是正确的,我只需要按员工对其进行汇总。如果我不包括日期部分,它会为整个日期范围选择distinct

SELECT   COUNT(DISTINCT ClientUID) AS [# clients], DATEPART(day, DateOfTan) AS [day of tan], EmployeeUID
FROM     History_TanHistory
WHERE    DateOfTan > CONVERT(DATETIME, '2016-06-01 00:00:00', 102) 
     AND DateOfTan < CONVERT(DATETIME, '2016-07-01 00:00:00', 102)
     AND Deleted = 0 AND Borrow = 0 AND AddedBack = 0 AND CanceledTan = 0
GROUP BY EmployeeUID, DATEPART(day, DateOfTan)
上面的查询生成这种类型的输出,底部没有总和 tan客户雇员日 383-E11132012143712J1U 1 52 383-E11132012143712J1U 2 80 383-E11132012143712J1U 3 68 383-E11132012143712J1U 5 58 383-E11132012143712J1U 6 78 383-E11132012143712J1U 7 65 383-E11132012143712J1U 9 85 383-E11132012143712J1U 10 64 383-E11132012143712J1U 11 65 383-E11132012143712J1U 13 55 383-E11132012143712J1U 14 55 383-E11132012143712J1U 16 76 383-E11132012143712J1U 17 65 383-E11132012143712J1U 18 50 383-E11132012143712J1U 20 55 383-E11132012143712J1U 21 56 383-E11132012143712J1U 23 47 383-E11132012143712J1U 24 79 383-E11132012143712J1U 25 59 383-E11132012143712J1U 27 55 383-E11132012143712J1U 28 54 383-E11132012143712J1U 30 62

总数1383

如果删除了datepart,它会将整个30天的时间段视为一个分组,并且只返回该员工的不同计数656

我需要它返回1383的总数


上述员工的样本数据。客户端id可能在davy中使用服务超过1次,但我只想计算一次

如果我理解正确,请将查询包装为子查询

这将返回一行和一个总数

SELECT
    SUM(T.[# clients]) AS TotalClients
FROM
(
    SELECT   COUNT(DISTINCT ClientUID) AS [# clients], DATEPART(day, DateOfTan) AS [day of tan], EmployeeUID
    FROM     History_TanHistory
    WHERE    DateOfTan > CONVERT(DATETIME, '2016-06-01 00:00:00', 102) 
         AND DateOfTan < CONVERT(DATETIME, '2016-07-01 00:00:00', 102)
         AND Deleted = 0 AND Borrow = 0 AND AddedBack = 0 AND CanceledTan = 0
    GROUP BY EmployeeUID, DATEPART(day, DateOfTan)
) AS T

一些示例输入和期望的输出在这里会很有帮助。您的需求不是很清楚,group本身使id和datepart对不同,因此count应该可以正常工作。这就解决了问题。那太容易了,我不知道为什么我没有想到这一点。谢谢弗拉基米尔,不客气。如果我的回答帮助了你,考虑一下投票和接受吧。
SELECT
    T.EmployeeUID
    ,SUM(T.[# clients]) AS ClientsPerEmployee
FROM
(
    SELECT   COUNT(DISTINCT ClientUID) AS [# clients], DATEPART(day, DateOfTan) AS [day of tan], EmployeeUID
    FROM     History_TanHistory
    WHERE    DateOfTan > CONVERT(DATETIME, '2016-06-01 00:00:00', 102) 
         AND DateOfTan < CONVERT(DATETIME, '2016-07-01 00:00:00', 102)
         AND Deleted = 0 AND Borrow = 0 AND AddedBack = 0 AND CanceledTan = 0
    GROUP BY EmployeeUID, DATEPART(day, DateOfTan)
) AS T
GROUP BY T.EmployeeUID