Oracle查询时想把以下格式
ID | JOB | NUM |
---|---|---|
1 | Q | 2 |
1 | W | 4 |
1 | E | 3 |
1 | R | 2 |
2 | S | 4 |
2 | Q | 2 |
2 | E | 6 |
转为
ID | Q | W | E | R | S |
---|---|---|---|---|---|
1 | 2 | 4 | 3 | 2 | |
2 | 2 | 6 | 4 |
请问怎样写??(注意JOB内容是从其他表获得,内容不固定,上面表格JOB内容只是示例)
Oracle查询时想把以下格式
ID | JOB | NUM |
---|---|---|
1 | Q | 2 |
1 | W | 4 |
1 | E | 3 |
1 | R | 2 |
2 | S | 4 |
2 | Q | 2 |
2 | E | 6 |
转为
ID | Q | W | E | R | S |
---|---|---|---|---|---|
1 | 2 | 4 | 3 | 2 | |
2 | 2 | 6 | 4 |
请问怎样写??(注意JOB内容是从其他表获得,内容不固定,上面表格JOB内容只是示例)
如果job的内容确定,可以用pivot语法;如果不确定,Oracle也没办法在sql查询时生成动态列的查询结果。
一般列不固定的话,至少得查两次,第一次对job列去重,得到所有的值,然后再把这些值放到pivot语法中in 后面的括号中去。
select listagg(''''||job||'''',',') within group(order by job) from ( select distinct JOB from table);
---得到字符串 'Q','W','E','R' ,然后带入下面的sql
select * from table pivot (max(num) for job in ('Q','W','E','R' ));