【问题标题】:Sum of column from subquery子查询中的列总和
【发布时间】:2020-01-05 21:44:25
【问题描述】:

下图表示 Access 数据库中三个表之间的关系。

  • [Shared Mailbox] 包含Exchange 中的共享邮箱(SMB) 列表。
  • [Shared Mailbox User] 列出了有权访问共享邮箱的电子邮件地址。
  • [Exchange Census] 包含所有邮箱的详细信息,无论是个人邮箱还是共享邮箱。 [Exchange Mailbox].MailboxSize(MB) 列是邮箱的大小。

对于每个[Shared Mailbox].SharedMailbox,我需要将有权访问它的用户邮箱的数量相加。

我正在处理以下查询:

SELECT  [Shared Mailbox].SharedMailbox, [Shared Mailbox].MailboxSmtpAddress,
(select Sum([MailboxSize(MB)]) from [Exchange Census] Where ([Shared Mailbox].SharedMailbox = [Shared Mailbox User].SharedMailbox) And 
([Shared Mailbox User].UserEmail = [Exchange Census].PrimarySmtpAddress) Group by [Shared Mailbox].SharedMailbox ) AS UserMailboxVolume
FROM ([Shared Mailbox] 
INNER JOIN [Exchange Census] ON [Shared Mailbox].MailboxSmtpAddress = [Exchange Census].PrimarySmtpAddress) 
INNER JOIN [Shared Mailbox User] ON [Shared Mailbox].SharedMailbox = [Shared Mailbox User].SharedMailbox;

这会产生一个如下所示的结果集,其中子查询返回子邮箱的大小而不是它们的总和:

我需要进行哪些更改才能使每个 SMB 获得一行以及具有访问权限的人的邮箱总量?

【问题讨论】:

  • 应该编辑问题以显示示例原始数据和所需的输出。
  • 让我澄清一下。对于 SharedMailbox 208CST,正确的结果是单行,其中 UserMailbox 是上面屏幕截图中显示的数字的总和。
  • Peh:我应用了您的代码编辑,但是它没有产生预期的结果。我仍然为每个邮箱获得多个(详细)行,而不是单个行的总和。
  • 仍在寻找样本原始数据。我知道您希望每个 SharedMailbox 有一行,但我需要数据来测试。我对人际关系有些困惑。因此,请展示包含一些代表性数据和结果的表格,这些数据和结果应该来自样本。

标签: sql ms-access sum subquery


【解决方案1】:

除非我误解了您的数据结构或要求,否则我认为您应该将Exchange Census 表加入您的Shared Mailbox User 表(因为它是您要查找的用户的邮箱大小计算),并完全省略相关子查询。

我会建议以下内容:

select
    sm.sharedmailbox,
    sm.mailboxsmtpaddress,
    sum(ec.[MailboxSize(MB)]) as usermailboxvolume
from
    (
        [shared mailbox] sm inner join [shared mailbox user] su on
        sm.sharedmailbox = su.sharedmailbox
    ) 
    inner join [Exchange Census] ec on su.useremail = ec.primarysmtpaddress
group by
    sm.sharedmailbox,
    sm.mailboxsmtpaddress

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-31
    • 1970-01-01
    • 1970-01-01
    • 2013-04-03
    • 2018-05-25
    相关资源
    最近更新 更多