sql怎么将结果行转换为列

sql如何将结果行转换为列
有个作息表,字段XQ从1到7 对应的SFXX,0是休息 1是上班, 有个员工BH

另个表就是员工BH对应XM
现在想的是假如我输入12月1日至3日,
我要显示每天上班的人,结果是
20141201 20141202  20141203 
张三            张三         
                                    李四
王五                             王五
日期对应星期我是用的C#的DayOfWeek自己写switch对应的,如果能直接用我给的两个日期来做以上效果最好604790441
表1
bh xq sfxx
1  1  1
1  2  0
1  3  1
1  4  0
1  5  0
1  6  1
1  7  0
2  1  1
。。。
表2
bh xm
1  张三
2  李四
3  王五
大概就是这个结构
------解决思路----------------------
用 TO_CHAR(日期 - 1,'d') 获得星期几。
建议先建个日历表,把星期预先算好。
可以根据日期范围多表关联生成单元明细。
不定长的行列转换还是用程序处理比较方便,否则列多了SQL可能超长。
------解决思路----------------------
select 
max(decode(表1.xq,to_char(to_date('20141201','yyyymmdd'),'d'),decode(表1.sfxx,1,表2.姓名))) as "20141201",
max(decode(表1.xq,to_char(to_date('20141202','yyyymmdd'),'d'),decode(表1.sfxx,1,表2.姓名))) as "20141202",
max(decode(表1.xq,to_char(to_date('20141203','yyyymmdd'),'d'),decode(表1.sfxx,1,表2.姓名))) as "20141203"
from 表1,表2
where 表1.bh=表2.bh
group by 表1.bh


列不固定的话,需要在应用程序中动态拼接,或是在数据库中动态创建视图实现