从行到列的动态转换

yvfmudvl  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(289)

在查询以下场景时需要您的帮助。
表1

Name -ID1  - ID2 - ID3 - IDn  
A1  - NULL - 11 - 12  - nn  
A2  -  14  - NULL -11  -nn

上表需要翻译如下
表2

Name - ID  
A1  - 11  
A1  - 12  
A2 - 14  
A2 - 11

表1中的id值可能一直到id50。表2是基于表1的输出。不考虑所有空值。最好的方法是什么。作为id值,任何动态执行此操作的方法都至少类似于id1-id50
有人能帮我问一下怎么做吗。谢谢

hrysbysz

hrysbysz1#

可以使用多个sql查询。

SET @SQL = NULL;

SET SESSION group_concat_max_len = @@max_allowed_packet;

SELECT 
 GROUP_CONCAT(
   CONCAT(
     "SELECT "
     , "Name"
     , ", " , COLUMNS.COLUMN_NAME, " AS id"
     , " FROM "
     , COLUMNS.TABLE_NAME
     , " WHERE "
     , COLUMNS.COLUMN_NAME
     , " IS NOT NULL "
   )
   SEPARATOR ' UNION ALL '
 ) AS SQL_code
 INTO
   @SQL
FROM 
 information_schema.COLUMNS
WHERE
   COLUMNS.TABLE_NAME = 'Table1'
 AND
   COLUMNS.COLUMN_NAME <> 'Name';

SET @SQL := CONCAT(@SQL, " ORDER BY Name ASC"); 

PREPARE s FROM @SQL;
EXECUTE s;

请参见演示https://www.db-fiddle.com/f/jdcmydxdlnegbq6ygjp1ph/1

相关问题