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.