sql-server - SQL 查询不返回相关记录处于非事件状态的记录

标签 sql-server sql-server-2008 dynamics-crm-2011 dynamics-crm

我有三个帐户 ABC、DEF 和XYZ。 ABC 有两个 Inactive Contracts。 DEF 没有任何契约(Contract)。 XYZ 有两份契约(Contract)(一份有效,一份无效)。

以下查询返回如下输出。

╔════╦══════════════╦══════╗
║name║ accountId    ║Count ║
╠════╬══════════════╬══════╣
║DEF ║ 554-050-4876 ║  0   ║
║XYZ ║ 111-000-4345 ║  1   ║
╚════╩══════════════╩══════╝

但我期待的结果如下:

╔════╦══════════════╦══════╗
║name║ accountId    ║Count ║
╠════╬══════════════╬══════╣
║ABC ║ 244-5677-444 ║  0   ║
║DEF ║ 554-050-4876 ║  0   ║
║XYZ ║ 111-000-4345 ║  1   ║
╚════╩══════════════╩══════╝

意思是,查询应该返回所有Accounts以及活跃Contracts的数量。如果一个帐户不存在契约(Contract),或者只有不活跃的契约(Contract)是他们的。查询应在 Count 列中返回 0。

SELECT 
    a.name 
    , a.accountid 
    , COUNT(c.contractid) AS  'Count' --Number Active Of Contracts
FROM FilteredAccount AS a
LEFT OUTER JOIN FilteredContract AS c
    ON a.accountid = c.accountid
WHERE a.statecode = 0 -- Active
    AND a.customertypecode = 3 -- Active
    AND a.name IN ('ABC','XYZ')
    AND (c.statecode = 2 or c.statecode is null)
GROUP BY a.name , a.accountid;

提前致谢。

最佳答案

将所有 JOIN 条件移动到 ON 子句中:目前您在 WHERE 中有过滤条件覆盖您的 左外连接

例如

SELECT 
    a.name 
    , a.accountid 
    , COUNT(c.contractid) AS  'Count' --Number Active Of Contracts
FROM FilteredAccount AS a
LEFT OUTER JOIN FilteredContract AS c
    ON (c.statecode = 2 or c.statecode is null) and a.accountid = c.accountid
WHERE a.statecode = 0 -- Active
    AND a.customertypecode = 3 -- Active
    AND a.name IN ('ABC','XYZ')
GROUP BY a.name , a.accountid;

关于sql-server - SQL 查询不返回相关记录处于非事件状态的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25310655/

相关文章:

sql - 获取 View 的列描述

sql-server - SQL 合并复制中 "Logical Records"的 future

sql-server - SQL Server 错误 [SQLState 42000](错误 325)

javascript - Crm 2011 - 手动保存后页面仍然是 "dirty"

dynamics-crm-2011 - 如何通过 Javascript 更新 Microsoft CRM Online 上的表单字段

sql-server - 在 Visual Studio 2017 中安装 Oracle Attunity 驱动程序

sql - 选择所有列,其中一列具有不同的值

sql - 任何使用Red Gate的SQL Source Control的人

dynamics-crm - 为什么我的 CRM 工作流程会触发无限循环保护?

c# - 我可以修改 setting.setting 文件中的值吗?