将 SQL Server 代码转换为 MS Access SQL 代码 - DISTINCT 问题 [重复]
Posted
技术标签:
【中文标题】将 SQL Server 代码转换为 MS Access SQL 代码 - DISTINCT 问题 [重复]【英文标题】:Translating SQL Server code in to MS Access SQL code - DISTINCT issue [duplicate] 【发布时间】:2019-04-23 12:51:39 【问题描述】:我在 SQL Server 中有一段代码需要在 MS Access 中使用,但由于无法在特定列/聚合函数上使用 DISTINCT,目前难以翻译它。
我尝试使用子查询来解决问题,但是我发现父案例 ID 的 COUNT 与子案例 ID 的计数相同(因为可以有多个具有相同父案例 ID 的子案例)。
这是在 SQL Server 中实现预期结果的代码:
SELECT
[Master_ID]
,COUNT(DISTINCT [parent_file_id]) AS Number_of_parent_files
,COUNT([Child_ID]) AS Number_of_child_files
FROM [EXAMPLE_TABLE]
GROUP BY [Master_ID]
ORDER BY 1
我希望看到所有主 ID 的列表、它们拥有的相应父文件 ID 数量以及所有父文件 ID 中有多少子文件的较低级别的详细信息。目前,当输入 Access 时,我无法在不影响父文件 ID 的情况下获得较低级别的详细信息。
【问题讨论】:
【参考方案1】:我相信您必须在子查询中进行分组,然后计算结果。因此,您必须汇总您的 number_of_child_files
字段两次才能收集计数。
SELECT
Master_ID,
Count(parent_file_id) as number_of_parent_files,
SUM(child_id_count) as number_of_child_files
FROM (
SELECT
Master_ID,
parent_file_id,
count(Child_ID) as child_id_count
FROM EXAMPLE_TABLES
GROUP BY Master_ID, parent_file_id
) as s
GROUP BY Master_ID
ORDER BY Master_ID;
【讨论】:
【参考方案2】:也许将 Distinct 与 Count(*) 分开处理。您可以尝试更改以下内容吗:
发件人:
COUNT(DISTINCT [parent_file_id]) AS Number_of_parent_files
收件人:
(Select Count(*) As cnt From (Select Distinct parent_file_id From [EXAMPLE_TABLE] As tbl)) AS Number_of_parent_files
【讨论】:
以上是关于将 SQL Server 代码转换为 MS Access SQL 代码 - DISTINCT 问题 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
如何在 MS Access 2007 或 MS SQL Server 2005 中通过 SQL 将字段转换为行
将 MS Access 报告转换为 SQL Server 报告
将存储过程从 MS SQL Server 转换为 Informix