抱歉,我无法清楚说明标题。我有一个表,其中有像
qid | content
--------------------
1 name1
2 surname1
3 feature1
1 name2
2 surname2
3 feature2
1 name3
2 surname3
3 feature3
4 x3
1 name4
2 surname4
3 feature4
我想创建一个与qid相关的sql查询以创建下表
column1 | column2 | column3 | column4
-----------------------------------------------
name1 surname1 feature1 NULL
name2 surname2 feature2 NULL
name3 surname3 feature3 x3
name4 surname4 feature4 NULL
qid 4的NULL不重要。
谁能帮我吗?
最佳答案
您可以在选择行时使用MySQL variables和If条件,并根据qid
值进行操作。
如果qid
小于特定列所需的值,则打印一个空值,否则将其分配给变量。我们为下一行携带上一列的值,这对于使它们进入合并状态是必要的。
如果发现qid
下一组行被重置,则将变量重新分配为空值。
最后,我们对column1
进行分组,并对每列取max()
来为column1
的每个值带来字典上的最大值。这还会过滤出直到第4列才完全形成的重复行。
请注意,这是在以下假设下进行的:行按顺序依次属于彼此,这意味着surname1
不能出现在name1
行的10行之后。
SQL:
select max(column1),max(column2),max(column3),max(column4)
from ( select if(qid = 1,@column1 := content,@column1) as column1,
if(qid = 2,@column2 := content,if(qid < 2,@column2 := '',@column2)) as column2,
if(qid = 3,@column3 := content,if(qid < 3,@column3 := '',@column3)) as column3,
if(qid = 4,@column4 := content,if(qid < 4,@column4 := '',@column4)) as column4
from test , (select @column1 := '',@column2 := '',@column3 := '',@column4 := '') init_variables) derived
group by column1;
演示:https://www.db-fiddle.com/f/wqdRkhF5uWGDCweZX4w8rS/0
关于mysql - MySQL从列ID上的列内容创建新行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55261092/