2015-07-30 1 views
0

je la requête suivante:Count Distinct Assistance

select c2.Responsible, c.deliveryname, 
case..... --conditions here 
end as 'PortStatus' 
from table p 
join table c 
on p.OwnerContactID = c.ContactID 
join table c2 
on c.ContactID = c2.ContactID 
where p.PortfolioStatus <>'' 
and c2.responsible <> '' 
group by c.deliveryname, p.PortfolioStatus, c2.responsible 

qui donne:

Responsable   DeliveryName   PortStatus
John Doe           Peter Smith           DI
John Doe           Peter Smith           EE
John Doe         Peter Smith           hy
John Doe         Peter Smith           pw
John Doe           Bob Lee                   pw
John Doe         Bob Lee                   pw
John Doe         Bob Lee                     ss

Je souhaite modifier ma requête avec un nombre (distincte) pour que je puisse voir combien PortStatus uniques (es) I avoir par nom de livraison.

Comment puis-je obtenir pour me montrer ceci:

Responsable       DeliveryName       unique PortStatus (es)
John Doe             Peter Smith               John Doe             Bob Lee                        

+0

Semble que vous connaissez déjà COUNT (DISTINCT), que s'est-il passé lorsque vous l'avez essayé? Avez-vous eu une erreur? –

+0

au lieu de la (4), je reçois 4 –

Répondre

0

Vous voulez utiliser l'agrégat COUNT et le mot-clé DISTINCT. Vous devez également supprimer votre groupement par portStatus, ou il vous donnera toujours un résultat de 1 pour chaque ligne.

select c2.Responsible, c.deliveryname, 
COUNT(DISTINCT (case..... --conditions here end)) as 'Unique PortStatus(es)' 
from table p 
join table c on p.OwnerContactID = c.ContactID 
join table c2 on c.ContactID = c2.ContactID 
where p.PortfolioStatus <>'' and c2.responsible <> '' 
group by c.deliveryname, c2.responsible 
+0

merci beaucoup! ça a marché! –

0

Il semble comme vous devez ajouter count(disctinct p.PortfolioStatus) et retirer p.PortfolioStatus du groupe par article.

select 
    c2.Responsible, 
    c.deliveryname, 
    count(disctinct p.PortfolioStatus) as "Unique PortStatus(es)" 
from table p 
join table c 
    on p.OwnerContactID = c.ContactID 
join table c2 
    on c.ContactID = c2.ContactID 
where p.PortfolioStatus <>'' 
    and c2.responsible <> '' 
group by c.deliveryname, c2.responsible 

Il est pas clair ce que l'expression de votre cas fait que vous avez quitté cette partie, donc il est possible que vous voulez utiliser cette expression dans la fonction de comptage si vous affectez le même statut de port à différentes valeurs de PortfolioStatus.

+0

qui l'a fait! Merci pour l'aide! –