2011-03-21 3 views
1

Disons que j'ai ces données dans une table de MSSQLRassembler plusieurs statistiques sur une table dans une seule requête

 
type  status  
a   open 
b   open 
a   closed 
a   closed 
a   closed 
b   open 
c   closed 

Je peux exécuter cette requête pour obtenir une table comme celui-ci
select type,count(*) from table where status = 'open'

 
a  1 
b  2 

Ensuite, je peux faire une autre requête
select type,count(*) from table where status = 'closed'

 
a   2 
c   1 

Comment puis-je écrire une requête qui me montre un tableau comme celui

 
type  open   closed 
a   1    2 
b   2    0 
c   0    1 

Répondre

3

Cela produira un résultat souhaité

select type, 
    SUM(case when status = 'open' then 1 else 0 end) as [Open], 
    SUM(case when status = 'closed' then 1 else 0 end) as [Closed] 
from table 
group by type 
0

Vous pouvez utiliser PIVOT, un coup d'oeil à l'BOL ou recherchez une Site SQL pour un exemple d'utilisation.

+1

Pour être honnête réponse bobs est beaucoup plus facile à mettre en œuvre que « PIVOT », alors allez avec ça. – Tony

+0

La réponse de Bob est plus facile à implémenter dans les cas les plus triviaux. –

+1

@Eric - Je ne suis pas d'accord. J'ai tendance à trouver «PIVOT» est confiné à des cas triviaux. Si vous voulez commencer à introduire plus d'un agrégat - eh bien vous ne pouvez pas. –

0

créé votre table dans SQL 2005 et a confirmé les travaux ci-dessous en utilisant la commande de pivot:

select * 
from (select type, status from table) test 
pivot (count(status) for status in ([Open], [Closed])) pivottable 
Questions connexes