在MySQL中取消枢纽分析表

我有一个如下表

CREATE TABLE unpivot_table (
    FirstName varchar(100) NOT NULL,LastName varchar(100) NOT NULL,query1 varchar(200) NOT NULL,result1 varchar(200) NOT NULL,query2 varchar(200) NOT NULL,result2 varchar(200) NOT NULL,query3 varchar(200) NOT NULL,result3 varchar(200) NOT NULL,query4 varchar(200) NOT NULL,result4 varchar(200) NOT NULL,query5 varchar(200) NOT NULL,result5 varchar(200) NOT NULL
    )

我正试图取消上表的显示,使其看起来像下表

CREATE TABLE UnPivoted (
        FirstName varchar(100) NOT NULL,query varchar(200) NOT NULL,result varchar(200) NOT NULL
        )   

在MSSQL中,我可以使用以下查询来实现

SELECT unpivot_table.FirstName,unpivot_table.LastName,CrossApplied.query,CrossApplied.result
FROM unpivot_table
CROSS APPLY (VALUES (query1,result1),(query2,result2),(query3,result3),(query4,result4),(query5,result5)) 
            CrossApplied (query,result);

但是我需要在MySQL中使用此查询中使用的“交叉应用”,而不是在MySQL中。

从我的研究中,我发现MySQL 8.0.14以来mysql引入了“侧向”,它可以替代“交叉应用”,但我未能编写查询。

请帮助在MySQL中实现这一目标。

谢谢。

zhzhhzhhh 回答:在MySQL中取消枢纽分析表

您可以使用union all

select FirstName,LastName,query1,result1 from unpivot_table
union all
select FirstName,query2,result2 from unpivot_table
union all
select FirstName,query3,result3 from unpivot_table
union all
select FirstName,query4,result4 from unpivot_table
,

mysql不支持Table Value constructor (VALUES)。唯一的方法是在进行query之前,先合并union和使用cross join的结果。

SELECT unpivot_table.FirstName,unpivot_table.LastName,CrossApplied.query,CrossApplied.result
FROM unpivot_table
CROSS JOIN 
    (
      SELECT query1 as query,result1 as result FROM unpivot_table
      UNION ALL
      SELECT query2 as query,result2 as result FROM unpivot_table
      UNION ALL
      SELECT query3 as query,result3 as result FROM unpivot_table
      UNION ALL
      SELECT query4 as query,result4 as result FROM unpivot_table
      UNION ALL
      SELECT query5 as query,result5 as result FROM unpivot_table
    ) 
CrossApplied 
本文链接:https://www.f2er.com/3104968.html

大家都在问