我有一个有趣的难题,我认为可以用纯粹的SQL解决.我有类似于以下的表:
responses:
user_id | question_id | body
----------------------------
1 | 1 | Yes
2 | 1 | Yes
1 | 2 | Yes
2 | 2 | No
1 | 3 | No
2 | 3 | No
questions:
id | body
-------------------------
1 | Do you like apples?
2 | Do you like oranges?
3 | Do you like carrots?
Run Code Online (Sandbox Code Playgroud)
我想得到以下输出
user_id | Do you like apples? | Do you like oranges? | Do you like carrots?
---------------------------------------------------------------------------
1 …Run Code Online (Sandbox Code Playgroud) 我有下表,它为每个用户提供了多个电子邮件地址.

我需要将其展平为用户查询的列.根据创建日期向我提供"最新"3个电子邮件地址.
user.name | user.id | email1 | email2 | email3**
Mary | 123 | mary@gmail.com | mary@yahoo.co.uk | mary@test.com
Joe | 345 | joe@gmail.com | [NULL] | [NULL]
Run Code Online (Sandbox Code Playgroud) 我有一个PostgreSQL函数(或表),它给我以下输出:
Sl.no username Designation salary etc..
1 A XYZ 10000 ...
2 B RTS 50000 ...
3 C QWE 20000 ...
4 D HGD 34343 ...
Run Code Online (Sandbox Code Playgroud)
现在我想要输出如下:
Sl.no 1 2 3 4 ...
Username A B C D ...
Designation XYZ RTS QWE HGD ...
Salary 10000 50000 20000 34343 ...
Run Code Online (Sandbox Code Playgroud)
这该怎么做?
我正试图从一个表格中获取特定格式的调查数据.但是我的所有尝试似乎都是因为DB上的连接太多/太重而无法提交数据库.
我的数据如下:
id, user, question_id, answer_id,
1, 1, 1, 1
3, 1, 3, 15
4, 2, 1, 2
5, 2, 2, 12
6, 2, 3, 20
Run Code Online (Sandbox Code Playgroud)
大约有250,000行,每个用户大约有30行.我希望结果看起来像:
user0, q1, q2, q3
1, 1, NULL, 15
2, 2, 12, 20
Run Code Online (Sandbox Code Playgroud)
这样每个用户在结果中都有一行,每个用户每个答案都有一个单独的列.
我正在使用Postgres,但任何SQL语言的答案都会受到赞赏,因为我可以翻译成Postgres.
编辑:我还需要能够处理不回答问题的用户,即上面的示例q2用户1.
可能重复:
转置sql结果,以便一列转到多列
我想在我的PSQL数据库中进行一种行/列交换.这是我的示例数据库:
id place price year
1 U.S. 80 2000
2 U.S. 60 2001
3 U.S. 40 2002
4 U.K. 600 2000
5 U.K. 500 2001
6 U.K. 350 2002
Run Code Online (Sandbox Code Playgroud)
我想将该表转换为以下示例:
year U.S. U.K.
2000 80 600
2001 60 500
2002 40 350
Run Code Online (Sandbox Code Playgroud)
这在PostgreSQL中是否可行?
postgresql ×5
sql ×5
crosstab ×3
pivot ×2
database ×1
dynamic-sql ×1
pivot-table ×1
transpose ×1