需要在 Access 2016 中创建提供不同计数的子查询

Need to create subquery in Access 2016 that gives a distinct count

所以我正在尝试创建一个查询,该查询将 return 学生(我在大学食品柜工作)从我们的食品柜中取出的食物总重量,并且我能够得到它给我所有我需要的总数,除了进来的不同学生的数量。基本上,我需要它给我进来的不同学生的数量,而不是它现在给我的交易数量。那里的任何人都知道如何解决它?当前代码如下:

Student_ID 是我需要子查询的字段,如果我是正确的...

SELECT DISTINCTROW 
    Format$([Transaction Table].[Date],'mmmm yyyy') AS [Month], 
    Sum([Transaction Table].Weight) AS [Total Weight], 
    Count(*) AS [Total Transaction], 
    Count([Transaction Table].Student_ID) AS [Unique Customers]
FROM [Transaction Table]
GROUP BY 
    Format$([Transaction Table].[Date],'mmmm yyyy'), 
    Year([Transaction Table].[Date])*12+DatePart('m',[Transaction Table].[Date])-1;

如果您只想要每个日期不同学生的数量,您可以使用以下方法:

SELECT Count(Student_ID) As StudentCount, ShortDate
FROM 
   (SELECT Student_ID, Format$([Date], "Short Date") As ShortDate
    FROM [Transaction Table] 
    GROUP BY Student_ID, Format$([Date], "Short Date"))
GROUP BY ShortDate

那你就可以在日期加入了。

但是,在一个语句中完成它会很困难,因为 Access 不喜欢嵌套子查询。

我想通了!我的问题是我试图 link 所有月份字段在一起。我需要做的是创建两个查询,首先按月计算不同的客户,另一个获取每月的交易数量和权重,然后编写最终查询以将我需要的所有字段合并在一起。固定代码如下:

交易笔数查询:

SELECT DISTINCTROW 
    Format$([Transaction Table].[Date],'mm/yyyy') AS [Month],
    Sum([Transaction Table].Weight) AS [Total Weight], 
    Count(*) AS [Total Transactions]
FROM [Transaction Table]
GROUP BY 
    Format$([Transaction Table].[Date],'mm/yyyy'), 
    Year([Transaction Table].[Date])*12+DatePart('m',[Transaction Table].[Date])-1;

唯一客户计数查询:

SELECT DISTINCTROW 
    [Month], 
    Count(ID) AS [Unique Customers]
FROM
    (SELECT DISTINCT 
        [Student_ID] AS ID, 
        Format$([Date],'mm/yyyy') AS [Month] 
    FROM [Transaction Table])  AS [%$##@_Alias]
GROUP BY 
    [Month], 
    Year([Month])*12+DatePart('m',[Month])-1;

合并前两个结果的最终查询:

SELECT 
    [Transaction Montly Query].Month, 
    [Transaction Montly Query].[Total Weight], 
    [Transaction Montly Query].[Total Transactions], 
    Format$(([Total Weight]/[Total Transactions]),'#.00') AS [Weight per Transaction], 
    [Unique Customer Query].[Unique Customers], 
    Format$(([Total Weight]/[Unique Customers]),'#.00') AS [Weight per Costomer], 
    Format$(([Total Transactions]/[Unique Customers]),'#.00') AS [Transactions per Customer]
FROM [Transaction Montly Query] 
    RIGHT JOIN [Unique Customer Query] 
        ON [Transaction Montly Query].Month = [Unique Customer Query].Month
GROUP BY 
    [Transaction Montly Query].Month, 
    [Transaction Montly Query].[Total Weight], 
    [Transaction Montly Query].[Total Transactions], 
    [Unique Customer Query].[Unique Customers]
ORDER BY [Transaction Montly Query].Month;