2015-06-23 62 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)