我无法在MySQL中转动表格。我一直在努力想要达到我想要的结果,我几乎就在那里,但我看不清楚下一步该做什么,我希望你能帮助我。
我正在创建一份调查问卷报告。报告指出应用问题的人,解决问题的人以及给出答案的问题集和更多信息。
我已经有一个查询,可以通过这种方式为每个人提供正确的信息:
╔═══════════════╦══════╦══════════════╦═══════════╦════════════╦════════════════╗
║ supervisor ║ zone ║ promoter ║ visit_id ║ question ║ answer ║
╠═══════════════╬══════╬══════════════╬═══════════╬════════════╬════════════════╣
║ EDGAR MONTIEL ║ VM1 ║ MIGUEL LOPEZ ║ 104285 ║ Question A ║ 1 ║
║ EDGAR MONTIEL ║ VM1 ║ MIGUEL LOPEZ ║ 104285 ║ Question B ║ 1 ║
║ EDGAR MONTIEL ║ VM1 ║ MIGUEL LOPEZ ║ 104285 ║ Question C ║ Any given text ║
╚═══════════════╩══════╩══════════════╩═══════════╩════════════╩════════════════╝
在许多教程中使用GROUP_CONCAT
和CONCAT
,我设法转动报告,检索正确的信息。
简而言之,我这样做了:
SELECT
GROUP_CONCAT(DISTINCT
CONCAT('MAX(IF(infoBase.question = \'',question,'\', \'',answer,'\', 0)) AS \'',question,'\'',''), "\n"
) INTO @answers
FROM (many tables)
WHERE (some expresions)
然后我使用预准备语句来获得最终结果:
SET @query :=
CONCAT(
'SELECT
infoBase.supervisor,
infoBase.zone,
infoBase.promoter,
infoBase.visit_id,
',@answers,' FROM (same tables as before) WHERE (same expresions as before)'
);
然后我执行查询:
PREPARE statement FROM @query;
EXECUTE statement;
虽然我正确检索了信息,但我的结果集如下所示:
╔═══════════════╦══════╦══════════════╦═══════════╦════════════╦════════════╦════════════════╦════════════╦════════════╦══════════════════════════════════════════════════════════════════════╦════════════╦════════════╦════════════════════════════╗
║ supervisor ║ zone ║ promoter ║ visit_id ║ Question A ║ Question B ║ Question C ║ Question A ║ Question B ║ Question C ║ Question A ║ Question B ║ Question C ║
╠═══════════════╬══════╬══════════════╬═══════════╬════════════╬════════════╬════════════════╬════════════╬════════════╬══════════════════════════════════════════════════════════════════════╬════════════╬════════════╬════════════════════════════╣
║ EDGAR MONTIEL ║ VM1 ║ MIGUEL LOPEZ ║ 104285 ║ 1 ║ 1 ║ Any given text ║ 3 ║ 3 ║ Including punctuation characters, like comma, admiration ! or dots . ║ 2 ║ 2 ║ Text is fun, text is life! ║
╚═══════════════╩══════╩══════════════╩═══════════╩════════════╩════════════╩════════════════╩════════════╩════════════╩══════════════════════════════════════════════════════════════════════╩════════════╩════════════╩════════════════════════════╝
信息是正确的,但它在同一行,并且没有看到关于人的第一部分。所以我尝试按visit_id
进行分组,这样可以实现这一点,我得到了这个:
╔═════════════════╦══════╦══════════════╦═══════════╦════════════╦════════════╦════════════════╗
║ supervisor ║ zone ║ promoter ║ visit_id ║ Question A ║ Question B ║ Question C ║
╠═════════════════╬══════╬══════════════╬═══════════╬════════════╬════════════╬════════════════╣
║ EDGAR MONTIEL ║ VM1 ║ MIGUEL LOPEZ ║ 104285 ║ 1 ║ 1 ║ Any given text ║
║ NEYRA OLIVER ║ VDM2 ║ OMAR SOTO ║ 114442 ║ 1 ║ 1 ║ Any given text ║
║ KAYRA RODRIGUEZ ║ GU1 ║ VICTOR SOTO ║ 114197 ║ 1 ║ 1 ║ Any given text ║
╚═════════════════╩══════╩══════════════╩═══════════╩════════════╩════════════╩════════════════╝
现在表格的第一部分是正确的,但关于问题的第二部分只反映了每一行中第一个人的结果。为了成功,我需要得到以下内容:
╔═════════════════╦══════╦══════════════╦═══════════╦════════════╦════════════╦══════════════════════════════════════════════════════════════════════╗
║ supervisor ║ zone ║ promoter ║ visit_id ║ Question A ║ Question B ║ Question C ║
╠═════════════════╬══════╬══════════════╬═══════════╬════════════╬════════════╬══════════════════════════════════════════════════════════════════════╣
║ EDGAR MONTIEL ║ VM1 ║ MIGUEL LOPEZ ║ 104285 ║ 1 ║ 1 ║ Any given text ║
║ NEYRA OLIVER ║ VDM2 ║ OMAR SOTO ║ 114442 ║ 3 ║ 3 ║ Including punctuation characters, like comma, admiration ! or dots . ║
║ KAYRA RODRIGUEZ ║ GU1 ║ VICTOR SOTO ║ 114197 ║ 2 ║ 2 ║ Text is fun, text is life! ║
╚═════════════════╩══════╩══════════════╩═══════════╩════════════╩════════════╩══════════════════════════════════════════════════════════════════════╝
这是对实际问题的过度简化。整个问题涉及不同问卷的数十个问题。问卷1有45个问题,问卷2有30个问题,问题3有80个问题等等。所以我甚至不知道问题的确切数量,因此我试图动态地得到这个问题。
我怎样才能得到这个结果?
我需要group by
或我需要做什么?
我试图说明清楚。如果需要更多信息,我将编辑问题。致谢!!!