抱歉,我无法清楚说明标题。我有一个表,其中有像

    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 variablesIf条件,并根据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/

10-15 11:28