Mysql sql中的查询--pivot或任何其他方式
在查询以下场景时需要您的帮助 表1Mysql sql中的查询--pivot或任何其他方式,mysql,sql,Mysql,Sql,在查询以下场景时需要您的帮助 表1 Name -ID1 - ID2 - ID3 A1 - NULL - 11 - 12 A2 - 14 - NULL -11 上表需要翻译如下 表2 Name - ID A1 - 11 A1 - 12 A2 - 14 A2 - 11 表2是基于表1的输出。不会考虑所有空值。最好的方法是什么 谁能帮我询问一下怎么做。非常感谢使用联合所有人: SELECT t.* FROM ( SELECT name, id1 AS
Name -ID1 - ID2 - ID3
A1 - NULL - 11 - 12
A2 - 14 - NULL -11
上表需要翻译如下
表2
Name - ID
A1 - 11
A1 - 12
A2 - 14
A2 - 11
表2是基于表1的输出。不会考虑所有空值。最好的方法是什么
谁能帮我询问一下怎么做。非常感谢使用
联合所有人
:
SELECT t.*
FROM
(
SELECT name, id1 AS id FROM table1
UNION ALL
SELECT name, id2 FROM table1
UNION ALL
SELECT name, id3 FROM table1
) t
WHERE id IS NOT NULL
ORDER BY name;
使用“全部联合”:
SELECT t.*
FROM
(
SELECT name, id1 AS id FROM table1
UNION ALL
SELECT name, id2 FROM table1
UNION ALL
SELECT name, id3 FROM table1
) t
WHERE id IS NOT NULL
ORDER BY name;
您可以使用UNPIVOT:
SELECT name, ID
FROM ( SELECT name, ID1, ID2, ID3 FROM table1)p
UNPIVOT
(ID FOR ID_value IN (ID1, ID2, ID3)) AS unpvt;
这将自动消除空值,并以数据透视格式输出。您可以使用UNPIVOT:
SELECT name, ID
FROM ( SELECT name, ID1, ID2, ID3 FROM table1)p
UNPIVOT
(ID FOR ID_value IN (ID1, ID2, ID3)) AS unpvt;
这将自动消除空值,并以数据透视格式输出。我将在每个select查询中放置is not null WHERE语句,以使内存表尽可能小。。UNION语句将强制MySQL使用内存表。。如果内存表变大,它将转换为基于MyISAM磁盘的表。谢谢你们的回复。但是如何动态处理呢。正如表1可以一直到ID1-ID50“但如何动态接近。正如表1可以一直到ID1-ID50”一样@kavanabangalore为什么在有人给出答案后总是会出现额外的“功能/需求”,我看到这在stackoverflow上经常发生……我错了。Chill broi会在每个select查询中放置is not null WHERE语句,以使内存表尽可能小。。UNION语句将强制MySQL使用内存表。。如果内存表变大,它将转换为基于MyISAM磁盘的表。谢谢你们的回复。但是如何动态处理呢。正如表1可以一直到ID1-ID50“但如何动态接近。正如表1可以一直到ID1-ID50”一样@kavanabangalore为什么在有人给出答案后总是会出现额外的“功能/需求”,我看到这在stackoverflow上经常发生……我错了。冷兄弟