MySQL数据透视表
作者:互联网
在过去的几天中,我一直在寻找解决此问题的方法.虽然我没有找到答案,但该网站一直出现在我的搜索结果中,因此我想尝试一下.顺便说一句,真棒.
我有一张像这样的桌子:
user_id | form_id | question_id | data_label | data_value
1 1 1 firstName Joe
1 1 2 lastName Smith
1 1 3 phone 5554443333
2 1 1 firstName Sally
2 1 2 lastName Jones
2 1 3 phone 3334445555
我想变成:
user_id | firstName | lastName | phone
1 Joe Smith 5554443333
2 Sally Jones 3334445555
我可以找到有关如何执行此操作的示例.我不太了解它们,但它们在那里.当此单个表保存从各种形式输入的数据以及任意数量的字段时,我的独特问题开始生效.因此,我可能有一张桌子,上面有:
user_id | form_id | question_id | data_label | data_value
1 1 1 firstName Joe
1 1 2 lastName Smith
1 1 3 phone 5554443333
2 1 1 firstName Sally
2 1 2 lastName Jones
2 1 3 phone 3334445555
3 2 1 fav_color red
3 2 2 fav_animal eagle
4 2 1 fav_color blue
4 2 2 fav_animal dog
然后,我将form_id作为参数传递,从该表单中按用户分组收集所有记录(它们都应具有带有不同值的相同标签),然后将该数据显示为:
…当form_id = 1时,报告如下:
user_id | firstName | lastName | phone
1 Joe Smith 5554443333
2 Sally Jones 3334445555
…当form_id = 2时,报告如下:
user_id | fav_color | fav_animal
3 red eagle
4 blue dog
我是高级SQL编程和过程的新手,无法独自解决该问题.我需要查询能够处理任何数量/类型的字段,而不必在每种表单的查询中输入确切的可能字段名称.请注意,紧接在上面的第一个查询具有四个字段,而第二个查询具有3个字段.因此,解决方案需要以这种方式灵活.
还可以从编程语言中生成SQL,因此如果有帮助,该解决方案还有更多选择.
如果您没有足够的信息,请通知我.
解决方法:
您可以尝试(未经测试)类似
select form_id,
max(case data_label when 'lastName' then data_value else null end) as lastname,
max(case data_label when 'firstName' then data_value else null end) as firstname,
max(case data_label when 'phone' then data_value else null end) as phone
from mytable
group by form_id
标签:crosstab,pivot-table,sql,mysql 来源: https://codeday.me/bug/20191208/2091258.html