Sql 选择查询以将行排序为列

Sql 选择查询以将行排序为列,sql,Sql,我不是SQL方面的高手,所以在尝试寻找解决方案一段时间后,我想寻求一些帮助 我有一个表,用于存储与帐户相关的选项: id, accountid, option_name, option_value 我可以写一个查询来将所有行作为列进行排序吗 目前,我必须手动执行以下操作: (SELECT option_value from account_options WHERE accountid=a.id and option_name = 'phonenumber') as phonenumber,

我不是SQL方面的高手,所以在尝试寻找解决方案一段时间后,我想寻求一些帮助

我有一个表,用于存储与帐户相关的选项:

id, accountid, option_name, option_value
我可以写一个查询来将所有行作为列进行排序吗

目前,我必须手动执行以下操作:

(SELECT option_value from account_options WHERE accountid=a.id and option_name = 
'phonenumber') as phonenumber,
(SELECT option_value from account_options WHERE accountid=a.id and option_name = 'nickname') 
as nickname,
(SELECT option_value from account_options WHERE accountid=a.id and option_name = 
 'profileicon') as profileicon
等等。是否可以编写一个查询,其中option_name成为列的名称,并且我可以在一个简单的查询中获取所有option_值


请容忍我。SQL不是我的强项。

您可以使用条件聚合:

SELECT MAX(CASE WHEN option_name = 'phonenumber' THEN option_value END) as phonenumber,
       MAX(CASE WHEN option_name = 'nickname' THEN option_value END) as nickname,
       . . . 
FROM account_options
GROUP BY accountid;

您可以使用条件聚合:

SELECT MAX(CASE WHEN option_name = 'phonenumber' THEN option_value END) as phonenumber,
       MAX(CASE WHEN option_name = 'nickname' THEN option_value END) as nickname,
       . . . 
FROM account_options
GROUP BY accountid;
似乎您必须使用:

结果:

ID  nickname    profileicon phonenumber
1   Adam    profile1.jpg    123456789
2   Eve profile2.jpg    987654321
3   Adam    profile3.jpg    741258963
有关动态版本,请参见:


您将在谷歌上找到更多信息。

似乎您必须使用:

结果:

ID  nickname    profileicon phonenumber
1   Adam    profile1.jpg    123456789
2   Eve profile2.jpg    987654321
3   Adam    profile3.jpg    741258963
有关动态版本,请参见:



您可以在谷歌上找到更多信息。

请提供示例数据和预期输出。什么数据库?如果可能,您需要重新设计数据库。使用适当的标准化结构,每个值有一列。或者根据您的数据库查看
PIVOT
。感谢您宝贵的反馈。我想我对目前的数据库设计很满意。我想我将不得不编写长SQL查询来处理设计,但它适合我的编码风格,并防止表中有不必要的列。再次感谢所有花时间回答问题的人。请提供示例数据和预期输出。什么数据库?如果可能,您需要重新设计数据库。使用适当的标准化结构,每个值有一列。或者根据您的数据库查看
PIVOT
。感谢您宝贵的反馈。我想我对目前的数据库设计很满意。我想我将不得不编写长SQL查询来处理设计,但它适合我的编码风格,并防止表中有不必要的列。再次感谢所有花时间回答的人。谢谢戈登。但我现在有20多个可供选择的名字。这些将随着时间的推移而增加。有没有一种方法可以让我运行一个查询来获取所有行并将它们转换为列?@user2672052。(1) 这回答了你在这里提出的问题。(2) 这很容易扩展到更多的列,这就是
旨在说明。(3) 如果不想全部键入,可以使用电子表格或动态SQL构造查询。谢谢Gordon。但我现在有20多个可供选择的名字。这些将随着时间的推移而增加。有没有一种方法可以让我运行一个查询来获取所有行并将它们转换为列?@user2672052。(1) 这回答了你在这里提出的问题。(2) 这很容易扩展到更多的列,这就是
旨在说明。(3) 如果不想全部键入,可以使用电子表格或动态SQL构造查询。