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可能超长。
------解决思路----------------------
列不固定的话,需要在应用程序中动态拼接,或是在数据库中动态创建视图实现
有个作息表,字段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
列不固定的话,需要在应用程序中动态拼接,或是在数据库中动态创建视图实现