55 votes

Compter en fonction d'une condition dans SQL Server

Quelqu'un sait-il comment faire un comptage dans le serveur SQL basé sur une condition ?

Exemple :

Comment puis-je compter les enregistrements portant le nom 'system' et le nombre total d'enregistrements CaseID dans la table ?

Table des clients

UserID     CaseID     Name
1          100        alan
1          101        alan
1          102        amy
1          103        system
1          104        ken
1          105        ken
1          106        system  

Le résultat s'affichera comme ci-dessous :

UserID    TotalCaseID    TotalRecordsWithSystem
1         7              2

128voto

gbn Points 197263

Utilisez SUM/CASE...

SELECT
    COUNT(*),  --total
    SUM(CASE WHEN name = 'system' THEN 1 ELSE 0 END) --conditional
FROM
    myTable

14voto

Matt Points 141

Je pense qu'il voulait l'identifiant de l'utilisateur dans les résultats

SELECT 
    userid,
    COUNT(*) as TotalcaseID, --total 
    SUM(CASE WHEN name = 'system' THEN 1 ELSE 0 END) as TotalRecordsWithSystem  
FROM 
    myTable 
group by userid

5voto

kage Points 51
select
userid,
count('x') as TotalCaseID,
count(case when name = 'system' then 'x' else null end) as TotalRecordsWithSystem
from CustomerTable
group by userid

2voto

Alex Points 639

Si vous êtes sur SQL Server 2012+, alors vous pouvez utiliser SUM/IIF

SELECT
    COUNT(*) AS Total,
    SUM(IIF(Name = 'system', 1, 0)) AS SystemTotal
FROM
    CustomerTable

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X