2016-04-07 17 views
0

içindeki SQL Kullanımı DISTINCT Aşağıdaki sorgu var:bir HALİNDE

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 

Bu sorgu función tablo MARC içinde birkaç satır bile TÜRÜ bütün sayıları döndürür. Ama eğer sadece DISTINCT FUNCIONS istersam nasıl yapabilirim? İlk sayım oldukça kolay ama erkek ve kadınları ayırmak için DISTINCT'i nasıl kullanabilirim?

Şimdiden teşekkürler!

+0

bazı örnek tablo verileri, cari sonucu ve beklenen sonuç ekle. – jarlh

+0

SELECT COUNT (DiSTINCT F.CD) ... ama buna bağlı. Örneğin. MS Access, – StanislavL

+0

jarlh desteklemiyor: Yinelenen değerleri kaldırmak için Toplam sonucunu DISTINCT olarak istiyorum ama DISTINCT'in aşağıdaki sayımlarda da uygulanmasını istiyorum! StanislavL: evet, ilk sayımda DISTINCT'i tıpkı bunun gibi kullanabilirim ... sorun, diğer iki sayımdır! –

cevap

1

Sen şartlı toplamasıyla COUNT DISTINCT kullanabilirsiniz:

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

Bunu bana söylediniz, örn. MS Access, COUNT (DISTINCT) ve önerilen alternatif yolu desteklemez :). – StanislavL

+2

@StanislavL, OP bunun bir MS Access sorusu olduğunu söylemedi. – jarlh

+0

@jarlh, sağlanan çözüm ortak durumda çalışmaz. Kullanılan DB'ye bağlıdır. Gordon bunu yapmak için alternatif bir yol sağladı ve cevaba bu şekilde eklenebilecekti. – StanislavL

İlgili konular