2010-03-26 4 views
0

i ont une table comme ceci:conditions sur le nombre dans une sélection

Table(MissioneID, Type) 

type peut être 1,2 ou 3

je dois compter les missions de valeur de type:

ex. si le contenu de la table est:

MissioneID Type 
1,1 
1,2 
1,1 
2,3 
1,2 

Le résultat de la requête est

MissioneID,Count1,Count2,Count3 
1, 2,2,0 
2,0,0,1 

Comment puis-je faire?

grâce

Répondre

4
select 
    MissioneID, 
    SUM(CASE WHEN [type]=1 THEN 1 ELSE 0 END) as Count1, 
    SUM(CASE WHEN [type]=2 THEN 1 ELSE 0 END) as Count2, 
    SUM(CASE WHEN [type]=3 THEN 1 ELSE 0 END) as Count3 
from 
    [Table] 
group by 
    MissioneID 
+0

+1, réponse correcte. Mais vous voudrez peut-être encapsuler 'type' entre crochets:' [type] 'car c'est un mot réservé. – Codesleuth

+0

Vrai, bien que cela ne pose aucun problème en contexte, pour 2000 ou 2008. (Seule l'erreur ci-dessus concerne une table appelée Table) –

0
select type,count(*) 
from table 
group by MissioneID 
+0

Je veux un résultat avec cette colonne: MissioneID, CountType1, CountType2, CountType3 Pas ce type, compte –

+0

oh désolé, mon erreur pour ne pas lire correctement votre problème. – Axarydax

2

On dirait que vous essayez de faire une requête de pivot ici:

SELECT MissioneID, [1], [2], [3] 
FROM Table 
PIVOT 
(
    COUNT(Type) 
    FOR Type IN ([1], [2], [3]) 
) AS pvt 
+0

Bonne réponse - Je n'oublie pas toutes les installations disponibles> 2000, puisque c'est là que je suis encore malheureusement languissant. –

+0

@Damien: Toujours bon de se souvenir de vos solutions de contournement héritées, vous ne savez jamais quand vous aurez besoin d'en utiliser un. J'aurais posté la version 'CASE' comme alternative (puisque l'auteur de la question n'a pas spécifié la version de SQL Server) mais vous l'avez fait en premier. :) – Aaronaught

Questions connexes