2016-09-15 2 views
1

다음과 같은 표가 있습니다.MySql을 사용하여 열을 표의 행으로 변환하는 방법

id  | name | place_1 | Place_2 | place_3 | 
------------------------------------------------------ 
12  | Anne | School |   |   | 
13  | Smith |   | church |   | 
14  | Mari | School |   | Temple | 
15  | Nash |   |   | Temple | 
16  | Narmada |   | Church | Temple | 

내가 원하는 것은 별도로 장소를 계산하고 다음 열만있는 표를 얻는 것입니다. 마찬가지로 Place_1과 같은 Place_2, Place_3. 저장 프로 시저를 사용하여 열을 행으로 변환합니다.

Place | count | 
------------------ 
Place_1 | 2  | 
Place_2 | 2  | 
Place_3 | 3  | 

사람이 그렇게 나를 도울 수 아래 같은

?

+0

는 장소는 항상 같은 열에 표시 마십시오 그들은 어떤 열에 표시 할 수 있습니다 - 예를 들어 학교는 항상 place_1에 게재되는 이유는 무엇입니까? –

+0

열거 형 열 ('2'이상)이 표시 될 때마다 경보 벨이 울리기 시작해야합니다. 정규화를 참조하십시오. – Strawberry

+0

@ P.salmon yeh. 저는 place_1을 학교로, place_2를 교회로, place_3을 사원으로 생각합니다. – casper

답변

0
drop table if exists t; 
create table t(id int, name varchar(10), place_1 varchar(10), Place_2 varchar(10), place_3 varchar(10)); 
insert into t values 
(2  , 'Anne' , ' School' , null  , null ), 
(13  , 'Smith' , null  , 'church' , null ), 
(14  , 'Mari' , 'School' , null  , 'Temple'), 
(15  , 'Nash' , null  , null  , 'Temple'), 
(16  , 'Narmada' , null  , 'Church' , 'Temple'); 


select 'Place_1' as place,count(*) 'Count' from t where place_1 is not null 
union 
select 'Place_2' as place,count(*) from t where place_2 is not null 
union 
select 'Place_3' as place,count(*) from t where place_3 is not null 

결과

+---------+-------+ 
| place | Count | 
+---------+-------+ 
| Place_1 |  2 | 
| Place_2 |  2 | 
| Place_3 |  3 | 
+---------+-------+