mysql - 从行到列的动态转置
问题描述
在查询以下场景时需要您的帮助。
表格1
名称 -ID1 - ID2 - ID3 - IDn A1 - 空 - 11 - 12 - nn A2 - 14 - 空 -11 -nn
上表需要翻译如下
表2
姓名 - 身份证 A1 - 11 A1 - 12 A2 - 14 A2 - 11
table1 中的 id 值可以到 ID50。表 2 将是基于表 1 的输出。不会考虑所有空值。做这个的最好方式是什么。任何动态执行此操作的方式,因为 ID 值至少会像 ID1 - ID50
任何人都可以帮助我查询如何执行此操作。非常感谢
解决方案
可以使用多个 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;
推荐阅读
- go - 这种恐慌的原因是什么?
- prolog - Prolog 编码整数,less/2(X, Y) 谓词
- php - 表单可以返回不同数量的值,尝试在学说查询中使用返回的值
- javascript - Plotly.js 热图性能
- c++ - 如何根据创建对象的需要使类扩展或减少属性。(C++)
- php - 无法使用对象从外部文件输出 JSON 数据
- nativescript - NativeScript v7+ 与 Vue Firebase 集成无法解析 tns-core-modules/application/application
- python - 尝试使用谷歌云运行 BigQuery 示例,但遇到问题
- r - 更改 ggsurvplot 的 x 轴标签
- javascript - spfx 导航锚标记必须单击两次