如何编写SOQL以区分Level_1__c,Level_2__c和Level_3__c的组合

问题描述

我想知道是否有可能像我们在sql中那样编写SOQL 像Level_1__c,Level_2__c和Level_3__c的区别

当前的SOQL是

              select Case__c,Level_1__c,Level_2__c,Level_3__c  FROM ERT_Case_Type__c 

如何重写以包括Level_1__c,Level_2__c和Level_3__c的区别

谢谢! 卡罗琳

解决方法

我认为对于您的用例,您将需要Apex。类似于以下内容:

Map<String,Set<String>> distinctLevels = new Map<String,Set<String>>{
    'Level_1__c' => new Set<String>(),'Level_2__c' => new Set<String>(),'Level_3__c' => new Set<String>()
};
Set<String> levelApiNames = new Set<String>{'Level_1__c','Level_2__c','Level_3__c'};
for(ERT_Case_Type__c caseType : [SELECT Case__c,Level_1__c,Level_2__c,Level_3__c FROM ERT_Case_Type__c]){
    for(String level : levelApiNames){
        distinctLevels.get(level).add(caseType.get(level));
    }
}
for(String level : levelApiNames){
    System.debug('Number of distinct ' + level + ' values: '  + String.valueOf(distinctLevels.get(level).size());
    //System.debug('List of distinct ' + level + ' values: ' + distinctLevels.get(level).toString());
    //System.debug(distinctLevels.get(level).size()); //as integer
}
  1. 遍历查询结果
  2. 遍历您要跟踪的每个字段API名称
  3. 将每个字段的值添加到地图内的集合中。该集合将只有唯一的值
  4. 使用每个字段API名称的映射值进行操作

这未经测试,但是高级大纲应该对您有用。