1

我有一个名为 [邮箱状态] 的表,其中列出了要迁移到 O365 的所有电子邮件邮箱。邮箱分批迁移(列 BatchNumber),迁移时,MailboxState 列设置为“客户端迁移”。

对于每个 BatchNumber,我需要计算迁移邮箱的数量(MailboxState = 'Client Migrated')。

SELECT [Mailbox Status].BatchNumber,
       DCount("MailboxState","[Mailbox Status]", "[MailboxState]='Client Migrated'") As MigratedCount
FROM [Mailbox Status]
WHERE [Mailbox Status].BatchNumber is not NULL
GROUP BY [Mailbox Status].BatchNumber ;

上述查询返回所有 BatchNumber 中已迁移邮箱的计数,而不是返回给定 BatchNumber 的计数。

我究竟做错了什么?

4

1 回答 1

1

如果我理解正确,您可以使用:

SELECT ms.BatchNumber, COUNT(*) As MigratedCount
FROM [Mailbox Status] as ms
WHERE ms.BatchNumber is not NULL AND
      ms.MailboxState = 'Client Migrated'
GROUP BY ms.BatchNumber ;

这将过滤掉任何没有迁移的批次。如果您也需要这些,请使用条件聚合:

SELECT ms.BatchNumber,
       SUM(IIF(ms.MailboxState = 'Client Migrated', 1, 0)) As MigratedCount
FROM [Mailbox Status] as ms
WHERE ms.BatchNumber is not NULL 
GROUP BY ms.BatchNumber ;

DCOUNT()并且COUNT()完全不同。 DCOUNT()计算结果集中所有行的记录。 COUNT()是聚合函数,用于确定聚合查询中某一行汇总的行数。

于 2019-08-11T12:40:40.790 回答