2010-08-24 72 views
3

我需要一个SQL将在此表转换帮助:MySQL的:透视+计数

=================== 
| 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 | 
=================== 

这样:

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

我可以这么简单计数等,但我在努力尝试用导出的信息来转换表格。任何帮助表示赞赏。

回答

6

使用:

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 THEN ELSE 1个0 END' ='IF(t.status = 100,1,0)' ='t.status = 100' – shmosel 2017-07-12 05:00:25

0

使用:

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