2016-04-07 9 views
0

私は次のクエリがありますSQLユースケースの内側DISTINCT

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 

をこのクエリはFUNCIONがテーブルMARCで複数の行を持っている場合でも、TYPEによってすべてのカウントを返します。しかし、私が欲しいのはDISTINCT何ができるのですか?最初のカウントは非常に簡単ですが、どのようにDISTINCTを使用して男性と女性を分けることができますか?

ありがとうございます!

+0

は、いくつかのサンプル・テーブル・データ、現在の結果、および期待される結果を追加します。 – jarlh

+0

SELECT COUNT(DiSTINCT F.CD)...それは依存します。例えば。 MS Accessは – StanislavL

+0

をサポートしていませんjarlh:重複した値を削除するために合計結果をDISTINCTしたいが、そのDISTINCTを次のカウントにも適用したい! StanislavL:はい、最初のカウントでは、DISTINCTをそのまま使用することができます...問題は他の2つのカウントにあります! –

答えて

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提供されている解決策は一般的には機能しません。使用するDBによって異なります。 Gordonはこれを行うための代替手段を提供し、その方法を答えに加えることができました。 – StanislavL