我有一个这样的表:

| 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/

10-11 05:58