2010-08-24 3 views
3

Мне нужна помощь с SQL, который преобразует эту таблицу:MySQL: Pivot + Подсчет

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

'случай, когда t.status = 100 ТОГДА 1 ИНАЧЕ 0 END' =' ЕСЛИ (t.status = 100, 1, 0) ' = 't.status = 100' – shmosel

0

Использование:

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