mysql 透视表_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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值