SQL Distinct Grouping?

Asked
Viewd177

0

Вот мой вопрос:

 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. Спасибо

  • Вы хотите, чтобы общая сумма для emailOpened включала как открытое, так и emailUnsubscribed?

    Shannon Severance13 ноября 2009, 19:13

2 ответов

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 битовым значением, которое интерпретируется как истина (это может быть 0).

  • Функция Sum - это то, что мне действительно нужно!

    DDiVita13 ноября 2009, 21:05
  • Аааа… Так просто, что я могу плакать !!!!Я забыл, что функция Count может принимать имя поля ... Большое спасибо!

    DDiVita13 ноября 2009, 20:44
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