2009-11-13 75 views
0

这里是我的查询:SQL不同分组?

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 

这里是我的结果如下:

emailOpened emailUnsubscribed emailBounced Totals 

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

我想总的电子邮件运行结束是8,而不是6.我意识到我问SQL以这种方式将他们分组。我只想知道如何为每列获得Distict总数。所以,emailOpened是8,emailUnsubscribed是1,和emailBounced将2.感谢

+0

你想让emailOpened的总数包括电子邮件打开和emailUnsubcribed? – 2009-11-13 19:13:24

回答

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

编辑:如果你正在寻找数记录在该标志为真时,你可以写如下

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:在上面的查询中,将true替换为被解释为true(可能为0)的位值。

+0

啊......很简单我可以哭!!!!我忘记了计数功能可以采取字段名称.....非常感谢! – DDiVita 2009-11-13 20:44:08

+0

和功能是我真正需要的,顺便说一句! – DDiVita 2009-11-13 21:05:37

2

我假设你只想计数值设置为true的记录。如果是这样,那么这可能会工作:

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