[英]MySQL Pivot table substring column names
我有一个到MySQL数据库的表结构,如下所示:
表数据 :
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
我期望的输出如下:
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
我想知道MySQL是否有任何方法可以做到这一点。 最大的问题是,我从未找到任何子字符串函数来截断列名。
您可以在数据库上测试我的查询。 您只需设置前两个变量。 表名和包含字符串的行号。
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;
测试
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)
请让我知道它是否适合您
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.