在以下情况下需要查询帮助。
表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。 table2将是基于表1的输出。将不考虑所有空值。做这个的最好方式是什么。动态地执行此操作的任何方式都是因为ID值至少像ID1-ID50
有人可以帮助我查询如何执行此操作。非常感谢
答案 0 :(得分:0)
可以使用多个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;