2014-03-28 46 views
1

我遇到问题,我写了一个查询,我需要返回给定顺序的机会数:Name1,Name2,Name3,Name4。问题是,如果计数为NULL,例如Name2,则查询返回Name1_count,Name3_count,Name4_count。SOQL:避免用NULL结果计数返回0(零)代替

我需要确保我总是在正确的顺序值,如果该值为null我需要回到0。但它不工作:(

我想:

Select Owner.Name 
     ,IF(ISBLANK(count(id)) 
     ,0 
     ,count(id)) 

    from Opportunity 

    where CloseDate = Today 
    and Approved__c = true 
    and (Owner.Name = 'Name1' 
     or Owner.Name = 'Name2' 
     or Owner.Name = 'Name3' 
     or Owner.Name = 'Name4') 

    group by Owner.Name 
+0

什么是不工作? –

+0

嘿,不幸的是我每天早上都会得到一个空的答复(当没有机会关闭时),并且如果员工是例如在假期(例如name2),订单结果是错误的,因为name2不会出现在结果中。 – user3472527

+0

我会想 名1:0 名2:0 名称3:0 名称4:0 这样反而不显示为空的任何结果的结果应列出结果以0 – user3472527

回答

0

您的查询使用名为owner的表格别名,该表格别名未定义。推测这应该是指Opportunity,尽管这只是一个猜测而已,如果您有NULL,则获得0,典型功能是coalesce()。而我取代了复杂的or个s的in

Select o.Name, coalesce(count(id), 0) 
from Opportunity o 
where CloseDate = Today and Approved__c = true and 
     o.Name in ('Name1', 'Name2', 'Name3', 'Name4') 
group by o.Name ; 

最后,把所有四个名字在输出中,你需要使用left outer join

+0

嘿感谢快速回答!很遗憾,我现在无法得到它的工作。我的理解问题:我是否需要第二个查询中的coalesce()以确保我得到0结果如果为空? – user3472527

+0

@ user3472527。 。 。在这种情况下,当第二个表中没有匹配的行时,count()'将返回'0'。 –

+0

嗯我得到一个语法错误..我很新的SOQL(不是SQL)和imho SOQL不支持OUTER JOIN甚至UNION ALL语句? – user3472527