2015-06-23 25 views
-1

我在我的SELECT中写下了这个。然而,则提示多个案例使用

EthnicGroupCd”在选择列表中无效,因为包含在聚合函数或GROUP BY子句是不 。

, (CASE WHEN b.ethnicgroupCd = 'N/A' THEN 
     (CASE WHEN g.GenderDsc = 'Male' THEN 'Male' 
     WHEN g.GenderDsc = 'Female' THEN 'Female' END) 
     ELSE b.ethnicgroupcd END) as EthnicGenderCd 

为什么要求我按即使我并不需要显示EthnicGroupCd?

+0

你需要显示'EthnicGroupCd',它是你的'ELSE'子句中?如果'EthnicGroupCd'是“一些价值”,那么这将是你的一个群体,你需要按它分组。顺便说一句,您可以简化您的语句为'CASE WHEN b.ethnicgroupCd ='N/A'然后g.GenderDsc ELSE b.ethnicgroupcd END' - 甚至 - ISNULL(NULLIF(b.ethnicgroupCd,'N/A' ),g.GenderDsc)' – GarethD

+0

@GarethD:我的意思是EthnicGroupCd只用于CASE,它不会显示在我的SELECT中。是不是只需要在我的SELECT中的其他字段执行聚合? – VeecoTech

+0

你正在使用哪个dbms? – jarlh

回答

0

我不需要显示EthnicGroupCd?

这不匹配:

ELSE b.ethnicgroupcd END 

可以解决此类似:

select .... ,(CASE WHEN b.ethnicgroupCd = 'N/A' THEN 
        (CASE WHEN g.GenderDsc = 'Male' THEN 'Male' 
        WHEN g.GenderDsc = 'Female' THEN 'Female' END) 
        ELSE b.ethnicgroupcd END) as EthnicGenderCd 
.... 
group by ...., (CASE WHEN b.ethnicgroupCd = 'N/A' THEN 
        (CASE WHEN g.GenderDsc = 'Male' THEN 'Male' 
        WHEN g.GenderDsc = 'Female' THEN 'Female' END) 
        ELSE b.ethnicgroupcd END)