我有一个这样的表:
| calendar_week | task | person |
| 1 | cooking | Bernd |
| 1 | cleaning | Julia |
| 2 | carwashing | Bernd |
| 2 | cleaning | James |
是否有可能获得这样的输出:
| calendar_week | cooking | cleaning | carwashing |
| 1 | Bernd | Julia | |
| 2 | | James | Bernd |
因此,不同的任务应成为列,并且任务是“随机的”。
最佳答案
您可以使用条件聚合:
select
calendar_week,
max(case when task = 'cooking' then person end) cooking,
max(case when task = 'cleaning' then person end) cleaning,
max(case when task = 'carwashing' then person end) carwashing
from mytable
group by calendar_week
这可以处理固定的任务列表,因为SQL查询必须返回固定的预定义列列表。如果您要处理的任务数量无法预测,那么您将需要使用动态SQL,或者如Strawberry所言,处理应用程序而不是数据库中的数据透视。
关于mysql - sql行值作为列?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58689556/