SOQL-запрос Salesforce возвращает все значения, включая NULL

У меня есть простой запрос SOQL:

выберите Количество (ID), CampaignId, Campaign.Name 
от CampaignMember 
где CampaignId in ('701U0000000MVoQ', '701U0000000MLFR', '701U0000000MVoL') 
группировать по CampaignId, Campaign.Name

Результат запроса возвращает 2 записи, поскольку в двух списках участников кампании есть контакты.

Я также хотел бы вернуть третью запись, в которой счетчик будет равен 0. Есть ли способ сделать это в SOQL, я не верю, что есть функция ISNULL(), которую можно использовать в select.

2 ответа

Решение

Есть какая-то особая причина, почему вам нужен совокупный запрос? Один из способов сделать это - использовать отношения, например:

SELECT Id, Name, (SELECT Id FROM CampaignMembers)
FROM Campaign
WHERE Id IN ('701U0000000MVoQ', '701U0000000MLFR', '701U0000000MVoL')

Позже в коде он может быть доступен так

List<Campaign> campaigns = [Id, Name, (SELECT Id FROM CampaignMembers)
FROM Campaign
WHERE Id IN ('701U0000000MVoQ', '701U0000000MLFR', '701U0000000MVoL')];

for(Campaign c : campaigns){
    System.debug(c.Name + ': ' + c.CampaignMembers.size());
}

Вы должны добавить дополнительную часть к вашему запросу soql под названием "Имея". Имея это как пункт Где

select Count(ID), CampaignId, Campaign.Name 
from CampaignMember 
where CampaignId in ('701U0000000MVoQ', '701U0000000MLFR', '701U0000000MVoL')
group by CampaignId, Campaign.Name 
HAVING COUNT(ID) >0

Наличие похоже на предложение Where, но условие HAVING применяется только к столбцам, которые также отображаются в GROUP BY.

Другие вопросы по тегам