需要在 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;
所以我正在尝试创建一个查询,该查询将 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;