【问题标题】:Need to create subquery in Access 2016 that gives a distinct count需要在 Access 2016 中创建提供不同计数的子查询
【发布时间】:2017-06-08 13:51:02
【问题描述】:

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

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;

【问题讨论】:

  • 我不确定这是否可以在没有某种类型的连接的情况下完成,因为您需要不同的交易不同的学生。这要求子集中的子集。我们以前做的是在主查询中创建一个“key”字段(即 SELECT 1 as Key),然后在另一个查询中执行相同的操作,并通过 Key 字段将两者连接起来,因为它们是相同的。你可能需要在这里做类似的事情,虽然看起来你是按月/年分组的,所以你可以使用它而不是 Key。

标签: sql ms-access ms-access-2016


【解决方案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 不喜欢嵌套子查询。

【讨论】:

  • 唯一的问题是我需要它来为我提供当前的所有信息,但我还需要它来让我对 Student_ID 字段有一个独特的计数。其他一切都在给我我需要的数字。我认为,此时我最大的问题是我不知道 Access 如何运行子查询...
  • 您可以在单独的查询中使用它,然后在日期将查询与您的查询结合起来。
  • 我很抱歉听起来像个傻瓜,但这是怎么做到的,哈哈?我以前从未做过任何类型的加入。
  • 假设您保存我的查询并将其命名为 QueryA。然后可以使用以下代码:SELECT DISTINCTROW Format$([Date],'mmmm yyyy') AS [Month], Sum([Transaction Table].Weight) AS [Total Weight], Count(*) AS [Total Transaction], Count([Transaction Table].Student_ID) AS [Unique Customers], StudentCount FROM [Transaction Table] INNER JOIN QueryA ON Format$([Date], "Short Date") = ShortDate GROUP BY Format$([Transaction Table].[Date],'mmmm yyyy'), Year([Transaction Table].[Date])*12+DatePart('m',[Transaction Table].[Date])-1, Studentcount;
【解决方案2】:

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

交易计数查询:

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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-04
    • 2021-09-21
    • 2020-10-30
    • 1970-01-01
    • 2017-07-04
    • 1970-01-01
    相关资源
    最近更新 更多