我想根据其 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 -- -- -- --
最佳答案
以下查询将为您提供预期结果:
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 允许的最大单词数时,这才有用。即在你的情况下是 5。
关于mysql - 如何根据数据关系将表行转换为列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50695398/