gpt4 book ai didi

php - 在 MySQL 中以特定方式透视表

转载 作者:行者123 更新时间:2023-11-29 06:12:26 24 4
gpt4 key购买 nike

还有其他数据透视表问题,但我似乎找不到问题的答案。

这是我的 table

ID    QUESTION       ANSWER       RECORDID      SORTORDER
1 Question 1 Answer 1.1 123456 1
2 Question 2 Answer 2.1 123456 2
3 Question 3 Answer 3.1 123456 3
4 Question 1 Answer 1.2 654321 1
5 Question 2 Answer 2.2 654321 2
6 Question 3 Answer 3.2 654321 3

等等

我想通过查询将其输出到:

Question 1    Question 2    Question 3
Answer 1.1 Answer 2.1 Answer 3.1
Answer 1.2 Answer 2.2 Answer 3.2

简而言之,问题列包含的问题不是唯一的(在此演示中有 2 个条目(参见 RECORDID)),因此需要按排序顺序对它们进行分组和排序。 RECORDID 始终是唯一的

我见过一些旋转/逆旋转示例,但无法理解它。有人可以帮我解决这个问题吗?

最佳答案

这应该可以解决问题。在内部查询中,您仅获得特定问题的答案,而在外部查询中,当您按 recordid 分组时,您将摆脱空值......尝试仅运行内部查询以了解想法。

select  
max(q.Question1),
max(q.Question2),
max(q.Question3) FROM (SELECT
recordid,
case when question = 'Question 1' then answer else null end as Question1,
case when question = 'Question 2' then answer else null end as Question2,
case when question = 'Question 3' then answer else null end as Question3 FROM questions) q group by q.recordid

如果您有任何问题,请告诉我!

编辑:您的评论增加了另一层复杂性 :) 现在我明白了我们如何使用该排序顺序列...我们需要一个更多的内部查询来获取问题及其排序顺序。然后根据每个排序顺序获取答案,然后按记录 ID 分组以过滤掉空值并获得所需的结果。请试试这个,让我知道它是怎么回事......选择语句中的问题数量必须等于问题最多的表格的问题数量 - 我已经输入 8 只是为了告诉你这不应该限制你。现在您将不再依赖于问题名称 - 仅依赖于排序编号。最好有排序顺序 - 否则你必须为每个记录 ID 生成一个行号......

SET @rank=0;
设置@id:=0;
选择
记录编号,
max(qq.question1) as '问题 1',
max(qq.question2) as '问题 2',
max(qq.question3) as '问题 3',
max(qq.question4) as '问题 4',
max(qq.question5) as '问题 5',
max(qq.question6) as '问题 6',
max(qq.question7) as '问题 7',
max(qq.question8) as '问题 8'
从 (
选择
记录编号,
case when q.rownumber = 1 then CONCAT(question,': ', answer) else null end as question1,
case when q.rownumber = 2 then CONCAT(question,': ', answer) else null end as question2,
case when q.rownumber = 3 then CONCAT(question,': ', answer) else null end as question3,
case when q.rownumber = 4 then CONCAT(question,': ', answer) else null end as question4,
case when q.rownumber = 5 then CONCAT(question,': ', answer) else null end as question5,
case when q.rownumber = 6 then CONCAT(question,': ', answer) else null end as question6,
case when q.rownumber = 7 then CONCAT(question,': ', answer) else null end as question7,
case when q.rownumber = 8 然后 CONCAT(question,': ', answer) else null end as question8
从(
选择
记录编号,
问题,
回答,
排序,
@rank:=CASE WHEN @id=recordid THEN @rank+1 ELSE 1 END as rownumber,
@id:=记录编号
来自按 recordid、sortorder 排序的问题
) q
)qq
GROUP BY recordid

关于php - 在 MySQL 中以特定方式透视表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37594980/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com