将 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 Access 查询转换为 Sql Server

将存储过程从 MS SQL Server 转换为 Informix

使用 MS SQL Server 中的 Group by 字段将垂直 sql 结果转换为水平输出

如何将 MS Access“IIF”查询转换为 Sql Server 查询?