我有一张桌子如下:

ID | Fileid1 | Fileid2 | Fileid3 | LanguageID1 | LanguageID2 | LanguageID3
---------------------------------------------------------------------------
1  | 123     | 256     |         | a12         | a23         | 
2  | 124     |         |         | a12         |             |

这里LanguageID1对应于Fileid1LanguageID2对应于Fileid2,依此类推.

我想将其转换为以下内容:

ID | Field | LangaugeID
1  | 123   | a12
2  | 256   | a23
3  | 124   | a12

我try 在这两个字段上使用UNPIVOT,但它给出了所有列之间的关系.应该怎么做?

推荐答案

你可以使用unions :

select row_number() over(order by ID, Fileid) as ID,
Fileid,
LanguageID 
from
(select ID, Fileid1 as Fileid, LanguageID1 as LanguageID from table_name
union all select ID, Fileid2 as Fileid, LanguageID2 as LanguageID from table_name
union all select ID, Fileid3 as Fileid, LanguageID3 as LanguageID from table_name) t
where Fileid is not null

Fiddle

Mysql相关问答推荐

MYSQL子查询

SQL计算不同的列并返回所有行

在联合查询中使用GROUP BY和ORDER BY

我可以指示MariaDB-Install-db和MariaDB忽略配置中的用户设置吗?

mysql 获取每个单词的第一个字母

为什么Mysql会根据查询参数改变查询执行计划?

MySQL 8.0 可以在 Select 语句中返回 JSON 对象数组吗?

在 MYSQL 8 中的 JSON 字段上的 SELECT 中返回所有键及其数组项

Select 同一张表中的结果数?

MySQL 可以用于将列表排序为三分之三吗?

MySQL - 如何根据单列查找重复行?

如何在Mysql中使用With和Values

Mysql,显示谁已经和没有 Select 退出巴士服务

MySql部分匹配基于部分查询代码

MySQL 根据另一列中的值更改空值

在 MySQL 中 Select COUNT of MAX

最好的 MySQL 性能调优工具?

MySQL 整数与日期时间索引

Python 是否支持 MySQL 准备好的语句?

将数据库从 Postgres 迁移到 MySQL