[英]MySQL Pivot table substring column names
I have a table structure into MySQL databse which looks like this: 我有一个到MySQL数据库的表结构,如下所示:
Table data : 表数据 :
Ref | Var | 3SAa combined % | 3SAa combined of | 3SAa Forward of |3SAa Forward % | 3SAa reverse % | 3SAa Forward of|
---------------------------------------------------------------------------------------------------------------------
AL23 TT 0.00 38.78 48.39 100.0 12.01 85.3
My desired output is the folowing: 我期望的输出如下:
ID | Ref |Var |a combined % | a combined of | a Forward of |a Forward % | a reverse % | a Forward of|
--------------------------------------------------------------------------------------------------------
3SA AL23 TT 0.00 38.78 48.39 100.0 12.01 85.3
I wanted to know if there is any manner to do it with MySQL. 我想知道MySQL是否有任何方法可以做到这一点。 The big issue, I have never found any substring function to truncate column names.
最大的问题是,我从未找到任何子字符串函数来截断列名。
you can test my Querys on your DB. 您可以在数据库上测试我的查询。 You only must setup the first two vars.
您只需设置前两个变量。 The Tablename and a Row number that contains the string.
表名和包含字符串的行号。
SET @table_name = 'mytab';
SET @col_id = 3;
SELECT DATABASE() INTO @dbname;
SELECT SUBSTRING_INDEX(COLUMN_NAME,' ' , 1) INTO @id_name
FROM information_schema.columns
WHERE table_schema = @dbname
AND TABLE_NAME = @table_name
AND ORDINAL_POSITION = @col_id;
SELECT CONCAT('SELECT \'', @id_name, '\' AS Id, ' , GROUP_CONCAT(
CONCAT( '`',COLUMN_NAME,'`')
, ' AS `', REPLACE(COLUMN_NAME,CONCAT(@id_name,' ') , '')
,'`\n' ), ' FROM ', @table_name) INTO @sql
FROM information_schema.columns
WHERE table_schema = @dbname
AND TABLE_NAME = @table_name
ORDER BY ORDINAL_POSITION;
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
Test 测试
MariaDB []> SELECT * FROM mytab;
+------+------+-----------------+------------------+
| Ref | Var | 3SAa combined % | 3SAa combined of |
+------+------+-----------------+------------------+
| AL23 | | 0.00 | 38.78 |
+------+------+-----------------+------------------+
1 row in set (0.00 sec)
MariaDB []> SET @table_name = 'mytab';
Query OK, 0 rows affected (0.00 sec)
MariaDB [bernd]> SET @col_id = 3;
Query OK, 0 rows affected (0.00 sec)
MariaDB []> SELECT DATABASE() INTO @dbname;
Query OK, 1 row affected (0.00 sec)
MariaDB []> SELECT SUBSTRING_INDEX(COLUMN_NAME,' ' , 1) INTO @id_name
-> FROM information_schema.columns
-> WHERE table_schema = @dbname
-> AND TABLE_NAME = @table_name
-> AND ORDINAL_POSITION = @col_id;
Query OK, 1 row affected (0.01 sec)
MariaDB []> SELECT CONCAT('SELECT \'', @id_name, '\' AS Id, ' , GROUP_CONCAT(
-> CONCAT( '`',COLUMN_NAME,'`')
-> , ' AS `', REPLACE(COLUMN_NAME,CONCAT(@id_name,' ') , '')
-> ,'`\n' ), ' FROM ', @table_name) INTO @sql
-> FROM information_schema.columns
-> WHERE table_schema = @dbname
-> AND TABLE_NAME = @table_name
-> ORDER BY ORDINAL_POSITION;
Query OK, 1 row affected (0.01 sec)
MariaDB []> PREPARE stmt FROM @sql;
Query OK, 0 rows affected (0.00 sec)
Statement prepared
MariaDB []> EXECUTE stmt;
+------+------+------+------------+-------------+
| Id | Ref | Var | combined % | combined of |
+------+------+------+------------+-------------+
| 3SAa | AL23 | | 0.00 | 38.78 |
+------+------+------+------------+-------------+
1 row in set (0.00 sec)
MariaDB []> DEALLOCATE PREPARE stmt;
Query OK, 0 rows affected (0.00 sec)
Please let me know if it works for you 请让我知道它是否适合您
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.