2009-11-13 5 views
0

SQL Distinct Grouping?

여기 내 쿼리는 다음과 같습니다.

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 

내 결과 모양은 다음과 같습니다.

전자 메일의 총합은 8이 아니라 8이되어야합니다. 그런 식으로 그룹화하십시오. 각 열에 대해 Distict 합계를 얻을 수있는 방법을 알고 싶습니다. 따라서 emailOpened는 8, emailUnsubscribed는 1, emailBounced는 2입니다. 감사합니다

+0

emailOpened의 총 합계에 전자 메일이 열리고 emailUnsubcribed가 포함되기를 원하십니까? –

답변

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

편집 : 당신이 플래그가 true 때 기록을 계산하기 위해 찾고 있다면, 당신은 아래로 쓸 수

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

Ahhhh ... 그래서 나는 울 수 있었다! !!! Count 함수가 필드 이름을 가질 수 있다는 것을 잊어 버렸습니다. ..... 감사합니다. – DDiVita

+0

합계 기능은 내가 정말로 필요한 것입니다, btw! – DDiVita

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