php - MySQL 数据透视表子字符串列名称

标签 php mysql pivot truncate

我在 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)

请告诉我它是否适合您

关于php - MySQL 数据透视表子字符串列名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35505296/

相关文章:

javascript - 使用 JavaScript 时生成 PDF

php - "group by"-query 出现意外结果

Mysql如何通过使用其他列的日期中的列和年份来添加唯一键

mysql - 在 Coldfusion CFQUERY 中按分钟而不是按天比较日期时间值

sql - SQL Pivot 是否可以执行以下查询?

Pandas 重新采样数据框并将日期时间索引保留为一列

sql - 如何比较分组后的所有列?

php - 使用Php注册时如何防止用户名重复?

php - Laravel 5.1 上的中间件中的 View 功能不起作用

php - 在 jQuery.Post 方法中执行 mySQL 查询