访问SQL查询以计算排除分组列值的%

时间:2014-08-05 21:04:11

标签: sql ms-access ms-access-2007

我会保持简短而甜蜜。我已经简化了,但这是一般的想法:

我有一张桌子:

NAME    DATE
John    4/7/11
John    6/6/12
John    7/25/15
Sue     9/16/16
Sue     8/14/12
Joe     7/3/13
Mary    11/24/11
Mary    5/28/15
Mary    12/15/12
Mary    12/29/13

我已经编写了一个查询来计算过去日期GROUP BY [名称]的百分比。它看起来像这样:

SELECT T1.Name, 
       Sum(IIf([Date]<Now(),1,0)) AS CountOfPastDates, 
       Count(T1.Date) AS CountEntries, 
       ([CountOfPastDates]/[CountEntries]) AS PercentPastDates 
FROM Table AS T1
GROUP BY T1.Name;

并给出如下结果:

NAME   % Past Dates
John   66.7
Sue    50.0
Joe    100.0
Mary   75.0

到目前为止一切顺利。

我现在尝试编写的是一个查询,用于计算每个ELSE的过去日期百分比,同时从百分比中排除人员结果。

结果应该如下:

NAME   Others % Past Dates
John   71.4
Sue    75.0
Joe    66.7
Mary   66.7

1 个答案:

答案 0 :(得分:1)

您可以尝试子查询:

select  names.name
,       (
        select  sum(iif([Date]<Now(),1,0)) / count([Date])
        from    YourTable t1
        where   names.name <> t1.name
        ) as PercentagePastWithoutMe
from    (
        select  distinct name
        from    YourTable
        ) names

不完全确定它是否适用于Access。请注意,百分比会在所有行上运行。如果你计算每人的百分比,然后计算平均值,你会得到一个不同的数字。