在SQL中一个接一个地划分

时间:2017-05-15 07:57:18

标签: sql ms-access access-vba ms-access-2010

我认为我过于复杂了。

我在SQL上并不出色,所以我有时需要使用查询构建器。

我想要实现的目标:

我希望我的查询能够告诉我:

经理姓名

经理名称在表格中的次数

等于TRUE的争议数

争议除以经理的总时间在表中

当前SQL

SELECT DISTINCT tbl_Quality_Disputes.LoggedDate, tbl_Quality_Disputes.Manager, Count(tbl_Quality_Disputes.Manager) AS CountOfManager, [Decision]/[Manager] AS Success_Rate
    FROM tbl_Quality_Disputes
    GROUP BY tbl_Quality_Disputes.LoggedDate, tbl_Quality_Disputes.Manager, tbl_Quality_Disputes.Decision, [Decision]/[Manager]
    HAVING (((tbl_Quality_Disputes.Decision)="Approved"));

我在哪里错了?

提前致谢

2 个答案:

答案 0 :(得分:1)

让我们从您需要的分组开始。在您的搜索结果中,您需要为每位经理添加一行,以便明确表示没有Decision

然后,您没有将过滤放在WHERE子句中的决策上,因为这样也会从计数(*)中删除行,但HAVING是意味着聚合字段的条件,所以你也不能把它放在那里。由于您需要对其中一个聚合进行过滤而不对另一个进行过滤,因此您可以在聚合内部使用case

最后,成功率的计算应基于计数,而不是ManagerDecision字段。

我忽略了LoggedDate字段,因为它的含义不明确,但如果你解释一下我会编辑我的查询以便它可以适合

SELECT  Manager,
        COUNT(*) AS CountOfManager,
        SUM(case when Decision = "Approved" then 1 else 0 end) AS Decision,
        SUM(case when Decision = "Approved" then 1 else 0 end) / Count(*) AS Success_Rate
FROM    tbl_Quality_Disputes
GROUP BY  Manager

作为旁注,我从所有字段前缀中删除了表名,因为当使用单个表时,不需要它并使查询更加冗长。使用两个或多个表时,最好在列名前加上前缀,但是您可以为表提供别名,使所有内容更紧凑。

修改

由于同一管理器的所有行的LoggedDate都相同,您可以添加GROUP BY或将其与MINMAX汇总(我更喜欢后一种选择,我发现它更强大)。

关于你得到的错误,可能是因为Access doesn't support the CASE expression(对不起,没有人知道)。我将其替换为IIF,现在它已经成功了。

SELECT  Manager,
        MAX(LoggedDate) AS MaxLoggedDate,
        COUNT(*) AS CountOfManager,
        SUM(IIF(Decision = "Approved", 1, 0)) AS CountOfDecision,
        SUM(IIF(Decision = "Approved", 1, 0)) / Count(*) AS Success_Rate
FROM    tbl_Quality_Disputes
GROUP BY  Manager

答案 1 :(得分:0)


尝试使用以下查询,

SELECT tbl_Quality_Disputes.LoggedDate, tbl_Quality_Disputes.Manager, 
Count(tbl_Quality_Disputes.Manager) AS CountOfManager, [Decision]/[Manager] AS Success_Rate
    FROM tbl_Quality_Disputes
WHERE tbl_Quality_Disputes.Decision="Approved"
    GROUP BY tbl_Quality_Disputes.LoggedDate, tbl_Quality_Disputes.Manager, 
tbl_Quality_Disputes.Decision, [Decision]/[Manager];

请提供样本数据和预期输出