【发布时间】:2021-10-20 13:07:20
【问题描述】:
我在 oracle sql 中进行数据透视时遇到了一些麻烦。我有一张桌子,上面有workdate、employee 和他们的shift 一天。此表称为SHIFT。
我希望在这个数据透视中,工作日期成为列标题,员工成为行标题,轮班成为一天,这样您就可以看到员工每天的轮班。
我目前的问题是我有一个查询,但枢轴要求我放置一个聚合函数。查询如下:
select employee, workdate, shift from shift
pivot (
max(shift)
for employee
in (
1,2,3,4
)
)
所以我这样做了,它带回了所有列,而不是以旋转格式。 当前结构:
| employee | workdate | shift |
|---|---|---|
| employee1 | date1 | shift1 |
| employee1 | date2 | shift2 |
| employee2 | date1 | shift1 |
| employee2 | date2 | shift2 |
| employee3 | date1 | shift1 |
| employee3 | date2 | shift2 |
| employee4 | date1 | shift1 |
| employee4 | date2 | shift2 |
| employee5 | date1 | shift1 |
| employee5 | date2 | shift2 |
我想要的结果是:
| date1 | date2 | date3 | |
|---|---|---|---|
| employee1 | shift1 | shift2 | shift3 |
| employee2 | shift1 | shift2 | shift3 |
| employee3 | shift1 | shift2 | shift3 |
| employee4 | shift1 | shift2 | shift3 |
感谢您的回答。
【问题讨论】:
-
如果需要按日期进行透视,则需要在
for中指定workdate,在in中指定日期 -
我希望 workdae 跑过,员工跑下来,但班次必须在数据之间(每天班次),但我必须在枢轴中使用聚合函数,它只会产生错误的结果