分组忽略空白字段

时间:2014-08-18 14:40:53

标签: sql ms-access-2010

我很难通过以下查询识别(并修复)我的分组问题。我的数据有一些国家/地区字段为空白,查询忽略它们,只有那些非空值的数据转换为行。我尝试删除国家/地区分组,但是我收到错误"您试图执行不包含指定表达式的查询" Country"作为聚合函数的一部分"。这是我在Access中的查询:

TRANSFORM Count([passed courses].[Course Number])
SELECT [domain].[Account ID], [domain].[Account Name], [passed courses].[Learner Email Address], [passed courses].Category, [passed courses].Country, [passed courses].[Earliest Start_Date], [passed courses].[Latest End_Date]
FROM [Domain Master] AS [domain] INNER JOIN (SELECT d3.ID, d3.[Learner Email Address], d3.[Course Number], d3.[Transcript Status], d3.Domain, c2.Category, [passed levels].Country, [passed levels].[Earliest Start_Date], [passed levels].[Latest End_Date]
    FROM

        (SELECT [completed courses].[Learner Email Address], [completed courses].[Level], [completed courses].Category, [completed courses].[Completed Count], [completed courses].Country, [learner dates].[Earliest Start_Date], [learner dates].[Latest End_Date]
        FROM

            (SELECT [courses taken].[Learner Email Address], [courses taken].[Level], [courses taken].Category, Count([courses taken].ID) AS [Completed Count], [courses taken].Country
            FROM

                (SELECT d1.ID, d1.[Learner Email Address], d1.[Course Number], c1.[Level], c1.Category, d1.[Transcript Status], d1.Country
                FROM [Data] AS d1
                INNER JOIN [Courses] AS c1 ON d1.[Course Number] = c1.[Course Number]
                )
                AS [courses taken]
            WHERE [courses taken].[Transcript Status] = "Completed"
            GROUP BY [courses taken].[Learner Email Address], [courses taken].Level, [courses taken].Category, d1.Country
            )
            AS [completed courses]

            INNER JOIN
            (SELECT d2.[Learner Email Address], d2.Country, Min(d2.Start_Date) AS [Earliest Start_Date], Max(d2.End_Date) AS [Latest End_Date]
            FROM [Data] AS d2
            GROUP BY d2.[Learner Email Address], d2.Country
            ) AS [learner dates]
            ON [completed courses].[Learner Email Address] = [learner dates].[Learner Email Address] AND
            [completed courses].Country = [learner dates].Country
        WHERE

            ([courses taken].Category = 'Sales') AND (
                (([completed courses].Level = 1) AND ([completed courses].[Completed Count] >=5)) OR
                (([completed courses].Level = 2) AND ([completed courses].[Completed Count] >=5)) OR
                (([completed courses].Level = 3) AND ([completed courses].[Completed Count] >=1))
            ) OR

            ([courses taken].Category = 'Purchase') AND (
                (([completed courses].Level = 1) AND ([completed courses].[Completed Count] >=5)) OR
                (([completed courses].Level = 2) AND ([completed courses].[Completed Count] >=4)) OR
                (([completed courses].Level = 3) AND ([completed courses].[Completed Count] >=1))
            )
        )
        AS [passed levels]

        INNER JOIN ([Data] AS d3 INNER JOIN Courses AS c2 ON ((d3.[Course Number] = c2.[Course Number])))
        ON ([passed levels].Level = c2.Level) AND ([passed levels].[Learner Email Address] = d3.[Learner Email Address]) AND ([passed levels].Category = c2.Category)
    )  AS [passed courses] ON [domain].[Partner Domain] = [passed courses].Domain
GROUP BY [domain].[Account ID], [domain].[Account Name], [passed courses].[Learner Email Address], [passed courses].Category, [passed courses].Country, [passed courses].[Earliest Start_Date], [passed courses].[Latest End_Date]
PIVOT [passed courses].[Course Number];

感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

如果您在查询中添加了一个案例陈述,如果国家/地区=''然后返回一个唯一的GUID,否则返回Country列值并将该别名别名为Country

GUID function for access

您可能需要将整个查询作为子查询包装,然后按国家/地区别名列进行分组。这还没有经过测试,只是一个概念性的想法,因为我无法看到任何其他方式对一个国家进行分组并忽略同一选择中的空白,或者你做了2次选择并做了一个联盟。

此致

利安