2016-09-15 10 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_1Place_2Place_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 | 
+---------+-------+ 
関連する問題