2016-08-17 8 views
0

テーブルの1行を転置したい。カラム名のカラム値を変数として取得する

たとえば、「ID」、「名字」、「姓」、「年齢」を属性として持つ「Persons」テーブルがある場合、「Persons」テーブルの行の転置を次のようにしたい2列:

Column_nameの、COLUMN_VALUE

私が使用して、テーブルのカラム名を取得することができます。

select attributes.`COLUMN_NAME`, person.attributes.`COLUMN_NAME` as `Column_Value` 
from (select * from Persons where ID=1) as person, 
(SELECT * FROM `INFORMATION_SCHEMA`.`COLUMNS` 
WHERE `TABLE_SCHEMA`='databasename' and `TABLE_NAME`='tablename'); 

SELECT * 
FROM `INFORMATION_SCHEMA`.`COLUMNS` 
WHERE `TABLE_SCHEMA`='databasename' 
AND `TABLE_NAME`='tablename'; 

私が使用して列名の値を取得しようとしました

ただし、2番目のパラメータは値の代わりに列名を指定しています。

この問題を解決する方法。

+0

列名をしたい場合は、パラメータとしてIDを渡すことができますが、データではなく、それがデータにそれらを作るのは難しいです。しかし、右側の関連する質問はあなたにヒントを与えるかもしれません。通常、データベース側でこれを行う良い理由はありませんが、フロントエンド/コード側で行うほうが便利です。 – Jakumi

答えて

0

あなたが準備された文で

DROP PROCEDURE IF EXISTS proc; 
DELIMITER $$ 
CREATE PROCEDURE proc() 
BEGIN 
    DECLARE query longtext; 
    SELECT 
    GROUP_CONCAT(CONCAT("(select '",column_name,"' as  col_name,",concat("person.",column_name)," as col_val 
    FROM (select * from test.game_action where id=1) as person,(SELECT * FROM `INFORMATION_SCHEMA`.`COLUMNS` 
    WHERE `TABLE_SCHEMA`='test' and `TABLE_NAME`='game_action')as t)") SEPARATOR ' union ') into query 
    FROM (select * from test.game_action where id=1) as person,(SELECT * FROM `INFORMATION_SCHEMA`.`COLUMNS` 
    WHERE `TABLE_SCHEMA`='test' and `TABLE_NAME`='game_action')as t; 

SET @s = query; 
PREPARE stmt FROM @s; 
EXECUTE stmt; 
DEALLOCATE PREPARE stmt; 
END 

をストアドプロシージャを使用することができますし、

+0

これに構文エラーがあります。 – pkgajulapalli

+0

あなたはエラーメッセージ@pkgajulapalli – Imanez

+0

を投稿することができますそれは単に "の近くにSQLエラーがあります"を示しています – pkgajulapalli

関連する問題