我知道是要进行行列转换,但是写了半天,效果不对。
这个是效果图:

下面是数据库中的值:

下面是我的SQL:
select to_char(run_date, 'yyyy-mm-dd') as run_date,
max(case team_name when '甲值' then team_name else '' end) as jiazhi,
max(case team_name when '乙值' then team_name else '' end) as yizhi,
max(case team_name when '丙值' then team_name else '' end) as binzhi,
max(case team_name when '丁值' then team_name else '' end) as dinzhi,
max(case team_name when '戊值' then team_name else '' end) as wuzhi,
begin_time
from V_work_time t group by run_date,team_name,begin_time order by t.run_date desc,begin_time asc
下面是我的sql执行效果:

同一天的甲乙丙丁戊不在同一行,还有后面的begin_time不知道如何处理,麻烦大家给点提示或者帮忙写一下,谢谢。
------解决方案--------------------
如果你确定只有5个值,那就硬连接起来就行了,可惜不是每个team_name都有run_date,连接有空值处理麻烦……
换个方式大概像这样
select SUM(run_date) '值班日期',SUM(jia) '甲值时间',SUM(yi) '乙值时间',SUM(bing) '丙值时间',SUM(ding) '丁值时间',SUM(wu) '戊值时间'
from (
select run_date,begin_time jia,0 yi,0 bing,0 ding,0 wu
from V_work_time where team_name='甲值'
union all
select run_date,0 jia,begin_time yi,0 bing,0 ding,0 wu
from V_work_time where team_name='乙值'
union all
select run_date,0 jia,0 yi,begin_time bing,0 ding,0 wu
from V_work_time where team_name='丙值'
union all
select run_date,0 jia,0 yi,0 bing,begin_time ding,0 wu
from V_work_time where team_name='丁值'
union all
select run_date,0 jia,0 yi,0 bing,0 ding,begin_time wu
from V_work_time where team_name='戊值'
);
值班时间为0的就是不值班的
啥!?你说有0点值班的?呵呵呵呵

------解决方案--------------------
oracle没有主键 还是自己手动添加
插入时间的时候 也是自己转换的 小麻烦了点
下面是通过动态sql写出来的 有执行结果
CREATE OR REPLACE PROCEDURE T_TEST
IS
V_SQL NVARCHAR2(2000);
CURSOR CURSOR_1 IS
SELECT team_name
FROM teamtab T;
BEGIN
V_SQL := 'SELECT run_date ';
FOR V_TB IN CURSOR_1
LOOP
V_SQL := V_SQL
------解决方案--------------------
','
------解决方案--------------------
'MAX(DECODE(A.team_name,'''
------解决方案--------------------
V_TB.team_name
------解决方案--------------------
''',DECODE(TIME_ID,1,''一'',2,''二'',3,''三'',4,''四''),NULL)) AS "'
------解决方案--------------------
V_TB.team_name
------解决方案--------------------
'"';
END LOOP;
V_SQL := V_SQL
------解决方案--------------------
' FROM teamtab a,runtab b' ;
V_SQL := V_SQL
------解决方案--------------------
' WHERE A.TEAM_ID = B.TEAM_ID';
V_SQL := V_SQL
------解决方案--------------------
' GROUP BY RUN_DATE ORDER BY RUN_DATE';
DBMS_OUTPUT.PUT_LINE(V_SQL);
--EXECUTE IMMEDIATE V_SQL;
END;
RUN_DATE 甲 乙 丙 丁 戊 己