2016-04-07 40 views
0

裏面我有以下查詢:SQL中使用DISTINCT一個CASE

SELECT M.TYPE, COUNT(F.CD) AS TOTAL, 
COUNT(CASE WHEN F.GENDER=0 THEN F.GENDER END) AS NUM_MALE, 
COUNT(CASE WHEN F.GENDER=1 THEN F.GENDER END) AS NUM_FEMALE 
FROM MARC M 
LEFT JOIN FUNCION F ON M.CD_FUNCION = F.CD 
GROUP BY 1 

此查詢返回的,即使一個函數,在表MARC幾行類型的所有罪名。但如果我只想要DISTINCT功能我該怎麼做?第一次計數很容易,但我怎樣才能使用DISTINCT來區分男性和女性?

在此先感謝!

+0

添加一些示例表數據,當前結果和預期的結果。 – jarlh

+0

SELECT COUNT(DiSTINCT F.CD)...但這取決於。例如。 MS Access不支持 – StanislavL

+0

jarlh:我希望它能夠刪除Total結果以刪除重複的值,但我希望DISTINCT也可應用於以下計數中! StanislavL:是的,在第一次計數中,我可以像這樣使用DISTINCT ...問題與其他兩個計數! –

回答

1

您可以使用COUNT DISTINCT有條件聚集:

SELECT M.TYPE, COUNT(DISTINCT F.CD) AS TOTAL, 
     COUNT(DISTINCT CASE WHEN F.GENDER = 0 THEN F.CD END) AS NUM_MALE, 
     COUNT(DISTINCT CASE WHEN F.GENDER = 1 THEN F.CD END) AS NUM_FEMALE 
FROM MARC M LEFT JOIN 
    FUNCION F 
    ON M.CD_FUNCION = F.CD 
GROUP BY M.TYPE; 
+0

你告訴我,例如MS Access不支持COUNT(DISTINCT)並建議替代方式:)。 – StanislavL

+2

@StanislavL,OP沒有說這是一個MS Access的問題。 – jarlh

+0

@jarlh提供的解決方案在常見情況下不起作用。這取決於使用的數據庫。戈登提供了另一種方式來做到這一點,並可以將答案添加到方法中。 – StanislavL