2009-11-13 9 views
0

Voici ma question:Groupe SQL Distinct?

SELECT 
    dbo.EmailCampaignTracking.emailOpened, 
    dbo.EmailCampaignTracking.emailUnsubscribed, 
    dbo.EmailCampaignTracking.emailBounced, 
    COUNT(*) 
FROM 
    dbo.EmailCampaignTracking 
    Group By 
    dbo.EmailCampaignTracking.emailBounced, 
    dbo.EmailCampaignTracking.emailUnsubscribed, 
    dbo.EmailCampaignTracking.emailOpened 

Voici ce que mes résultats ressemblent:

emailOpened emailUnsubscribed emailBounced Totals 

    True   False   False   6  
    False   False   True   1 
    True   True    False   2 

Je voudrais le total pour le courrier électronique pour être 8 à ouvert et non 6. Je me rends compte que je demande SQL pour les regrouper de cette façon. Je veux juste savoir comment je peux obtenir les totaux de Distict pour chaque colonne. Donc, emailOpened serait 8, emailUnsubscribed serait 1 et emailBounced serait 2. Merci

+0

Voulez-vous que le total pour emailOpened inclue à la fois email ouvert et emailUnsubcribed? –

Répondre

5
SELECT Count(emailOpened) AS OpenedCount, 
Count(emailUnsubscribed) as UnsubCount, 
Count(emailBounced) as BouncedCount 
FROM dbo.EmailCampaignTracking 

EDIT: Si vous cherchez à compter les enregistrements lorsque le drapeau est vrai, vous pouvez l'écrire comme ci-dessous

SELECT SUM(CASE emailOpened WHEN true then 1 else 0) AS OpenedCount, 
SUM(CASE emailUnsubscribed WHEN true then 1 else 0) as UnsubCount, 
SUM(CASE emailBounced WHEN true then 1 else 0) as BouncedCount 
FROM dbo.EmailCampaignTracking 

EDIT2: Dans la requête ci-dessus, remplacez true par la valeur de bit interprétée comme vraie (elle peut être 0).

+0

Ahhhh ... Tellement simple que je pourrais pleurer !!!! J'oublie la fonction Count peut prendre un nom de domaine ..... Merci beaucoup! – DDiVita

+0

La fonctionnalité Sum est ce dont j'avais vraiment besoin, btw! – DDiVita

2

Je suppose que vous voulez uniquement compter les enregistrements où les valeurs sont définies sur true. Si oui, cela peut fonctionner:

SELECT SUM(CAST(EmailOpened AS INT)) AS OpenedEmails, 
    SUM(CAST(EmailUnsubscribed AS INT)) AS UnsubscribedEmails, 
    SUM(CAST(EmailBounced AS INT)) AS EmailBounced 
FROM dbo.EmailCampainTracking