2010-08-24 16 views
3

J'ai besoin d'aide avec un SQL qui convertira ce tableau:MySQL: Pivot + Counting

=================== 
| Id | FK | Status| 
=================== 
| 1 | A | 100 | 
| 2 | A | 101 | 
| 3 | B | 100 | 
| 4 | B | 101 | 
| 5 | C | 100 | 
| 6 | C | 101 | 
| 7 | A | 102 | 
| 8 | A | 102 | 
| 9 | B | 102 | 
| 10 | B | 102 | 
=================== 

à ceci:

========================================== 
| FK | Count 100 | Count 101 | Count 102 | 
========================================== 
| A | 1   | 1   | 2   | 
| B | 1   | 1   | 2   | 
| C | 1   | 1   | 0   | 
========================================== 

Je peux simples comptes, etc., mais je luttais essayer faire pivoter la table avec les informations dérivées. Toute aide est appréciée.

Répondre

6

Utilisation:

SELECT t.fk, 
     SUM(CASE WHEN t.status = 100 THEN 1 ELSE 0 END) AS count_100, 
     SUM(CASE WHEN t.status = 101 THEN 1 ELSE 0 END) AS count_101, 
     SUM(CASE WHEN t.status = 102 THEN 1 ELSE 0 END) AS count_102 
    FROM TABLE t 
GROUP BY t.fk 
+0

'CASE WHEN t.status = 100 ALORS une AUTRE 0 END' = 'IF (t.status = 100, 1, 0)' = 't.status = 100' – shmosel

0

utilisation:

select * from 
(select fk,fk as fk1,statusFK from #t 
) as t 
pivot 
(COUNT(fk1) for statusFK IN ([100],[101],[102]) 
) AS pt