过去几天,我一直试图找到这个问题的答案。虽然我没有找到答案,但这个网站仍然出现在我的搜索结果中,所以我想我会尝试一下。 BTW帖子的真棒格式化选项。
我有一张表:
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也可以从编程语言生成,因此如果有帮助,该解决方案还有更多选项。
如果您没有足够的信息,请通知我。
答案 0 :(得分:3)
您可以尝试(未经测试)类似
的内容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