新手求教oracle行转列问题原表数据: ID_NO_SZNAME_SZBANDIRDAYS2000139孔令波D01+E01間接12000139孔令波D0
新手求教oracle行转列问题
原表数据:
ID_NO_SZNAME_SZBANDIRDAYS
2000139孔令波D01+E01間接1
2000139孔令波D02+E02間接26
2000225楊長永D02+E02間接24
2000245潘亞平D01+E01直接24
想转换成如下形式的求高手指点:
ID_NO_SZNAME_SZD01+E01 D02+E02 DIR
2000139 孔令波 1 26 間接
2000225楊長永 0 24 間接
2000245潘亞平 24 0 直接
(D01+E01 D02+E02 下面的数字为原表的days数值 )
[解决办法]
--这两个都行.
- SQL code
select ID_NO_SZ ,NAME_SZ, max(case BAN when 'D01+E01' then DAYS else 0 end) "D01+E01", max(case BAN when 'D02+E02' then DAYS else 0 end) "D02+E02", max(DIR) DIRfrom tbgroup by ID_NO_SZ ,NAME_SZselect ID_NO_SZ ,NAME_SZ, max(decode (BAN ,'D01+E01' , DAYS , 0 )) "D01+E01", max(decode (BAN ,'D02+E02' , DAYS , 0 )) "D02+E02", max(DIR) DIRfrom tbgroup by ID_NO_SZ ,NAME_SZ
[解决办法]
- SQL code
select ID_NO_SZ ,NAME_SZ, max(case BAN when 'D01+E01' then DAYS else 0 end) "D01+E01", max(case BAN when 'D02+E02' then DAYS else 0 end) "D02+E02", max(DIR) DIRfrom tbgroup by ID_NO_SZ ,NAME_SZ
[解决办法]
- SQL code
select ID_NO_SZ ,NAME_SZ, max(decode (BAN ,'D01+E01' , DAYS , 0 )) "TA夜班出勤天数1", max(decode (BAN ,'D02+E02' , DAYS , 0 )) "TA夜班出勤天数2", max(DIR) DIRfrom tbgroup by ID_NO_SZ ,NAME_SZ
