如何根据数据的关系将表行转换为列

nzrxty8p  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(348)

我想改变我的行数据列根据其id如下表所示。在那里,我必须在同一个id的行中显示5个单词,如果一个id少于5个单词,则其余列将用“-”符号填充。我在这里使用mysql,我需要一种动态的方法来处理任何数量的数据。
我的table:

wordID   Word     Per     Sequence
  1      Kelly    68          1
  1      John     26          2
  2      Nisum    5.29        1
  2      Bily     14.1        2
  2      George   10          3
  2      Rihana   22          4
  3      August   72          1
  3      Rush     22          2
  3      Routh    95          3

所需表格:

wordID   word    Per   word    Per    word    Per   word    Per   word   Per    
  1      Kelly   68    John    26      --     --     --     --    --    --
  2      Nisum   5.29  Bily    14.1   George  10    Rihana  22    --    --
  3      August  72    Rush    22     Routh   95     --     --    --    --
dz6r00yl

dz6r00yl1#

此代码适用于此类问题:请在此处输入图像描述

1zmg4dgp

1zmg4dgp2#

以下查询将为您提供预期结果:

SELECT wordID,  

    IFNULL(MAX(CASE WHEN Sequence='1' THEN Word ELSE NULL END),'--') AS Word, 
    IFNULL(MAX(CASE WHEN Sequence='1' THEN Per ELSE NULL END),'--') AS  Per,

    IFNULL(MAX(CASE WHEN Sequence='2' THEN Word ELSE NULL END),'--') AS Word, 
    IFNULL(MAX(CASE WHEN Sequence='2' THEN Per ELSE NULL END),'--') AS  Per,

    IFNULL(MAX(CASE WHEN Sequence='3' THEN Word ELSE NULL END),'--') AS Word, 
    IFNULL(MAX(CASE WHEN Sequence='3' THEN Per ELSE NULL END),'--') AS  Per,

    IFNULL(MAX(CASE WHEN Sequence='4' THEN Word ELSE NULL END),'--') AS Word, 
    IFNULL(MAX(CASE WHEN Sequence='4' THEN Per ELSE NULL END),'--') AS  Per,

    IFNULL(MAX(CASE WHEN Sequence='5' THEN Word ELSE NULL END),'--') AS Word, 
    IFNULL(MAX(CASE WHEN Sequence='5' THEN Per ELSE NULL END),'--') AS  Per

FROM tableName 

GROUP BY wordID

注*:只有在限制给定wordid允许的最大字数时,这才有用。i、 你的情况是5。

相关问题