2010-10-25 14 views
1

J'essaie de créer un rapport et je cherche à extraire des informations d'une table 'contact'. J'essaie de retirer le «conseiller» concernant le contact et le nombre de contacts qui ont ce conseiller en fonction d'un ensemble de critères. C'est très bien et fonctionne, cependant, je veux sortir une troisième colonne qui est aussi un «compte» basé sur un ensemble différent de critères. C'est là que j'ai des problèmes.Erreur d'exécution SQL - Impossible d'analyser le texte de la requête

Actuellement, j'ai le dessous duquel les États « incapables d'analyser le texte de requête »:

SELECT advisoridName AS Advisor, 
    COUNT(*) WHERE (advisorid IS NOT NULL) AND (ContactType = 1) AND (StateCode = 0) AS 'Active Participants', 
    COUNT(*) WHERE (advisorid IS NOT NULL) AND (ContactType = 1) AS 'Total Participants' 
FROM Contact 
GROUP BY advisoridName, advisorid 
ORDER BY PDA 

Il serait apprécié si vous pouviez me diriger dans la bonne direction.

Merci à l'avance

Répondre

1

COUNT(*) n'est pas conditionnel, du moins pas dans TSQL. Je suggère d'utiliser SUM(CASE WHEN ... - comme ceci:

SELECT advisoridName AS Advisor, 
    SUM(CASE WHEN (advisorid IS NOT NULL) AND (ContactType = 1) AND (StateCode = 0) 
      THEN 1 
      ELSE 0 
     END) AS 'Active Participants', 
    SUM(CASE WHEN (advisorid IS NOT NULL) AND (ContactType = 1) 
      THEN 1 
      ELSE 0 
     END) AS 'Total Participants' 
FROM Contact 
GROUP BY advisoridName, advisorid 
ORDER BY PDA 
0

Vous pouvez faire la même chose avec le comte que vous avez fait avec, mais vous ne besoin d'un GROUP BY

SELECT COUNT (CASE when advisorid IS NOT NULL AND ContactType = 1 AND StateCode = 0 THEN AdvisorID END) as ActiveParticipants, 
COUNT (CASE when advisorid IS NOT NULL AND ContactType = 1 THEN AdvisorID) as TotalParticipants 
FROM Contact 
ORDER By PDA