楼上的是对的改一下:with tb1 as ( select '张三' fname,'201007' month_id, '部门1' f1, '部门2' f2, '部门3' f3, '部门4' f4 from dual ), tb2 as ( select rownum day_id from dual connect by rownum < 31 ) select tb1.fname 姓名,tb1.month_id||to_char(tb2.day_id,'00') 日期, decode(tb2.day_id,1,tb1.f1,2,f2,3,f3,4,f4) 部门 from tb1,tb2
我用这个SQL语句实现了,能不能帮忙再优化一下(把2月31日,4月31日之类不存在的日期数据去掉) select username,tmonth||'01',D1 from TB1 union all select username,tmonth||'02',D2 from TB1 union all select username,tmonth||'03',D3 from TB1
select '张三' fname,'201007' month_id, '部门1' f1, '部门2' f2, '部门3' f3, '部门4' f4
from dual
),
tb2 as (
select rownum day_id from dual
connect by rownum <= 31
)
select tb1.fname,tb1.month_id,tb2.day_id,
decode(tb2.day_id,1,tb1.f1,2,f2,3,f3,4,f4) f_department
from tb1,tb2
select '张三' fname,'201007' month_id, 'A' f1, 'A' f2, 'B' f3, 'D' f4 from dual union all
select '斯大林' fname,'201007' month_id, 'F' f1, 'A' f2, 'B' f3, 'SDG' f4 from dual union all
select '啊毛' fname,'201007' month_id, 'V' f1, 'F' f2, 'E' f3, 'D' f4 from dual
),
tb2 as (
select rownum day_id from dual
connect by rownum <= to_number(to_char(last_day(to_date('201007', 'yyyymm')), 'dd'))
)select
tb1.fname,
tb1.month_id,
tb2.day_id,
decode(tb2.day_id, 1, tb1.f1, 2, f2, 3, f3, 4, f4) f_department
from tb1, tb2
group by tb1.fname, tb1.month_id, tb2.day_id, decode(tb2.day_id, 1, tb1.f1, 2, f2, 3, f3, 4, f4)
order by tb1.fname
FNAME MONTH_ID DAY_ID F_DEPARTMENT
啊毛 201007 1 V
啊毛 201007 2 F
啊毛 201007 3 E
啊毛 201007 4 D
啊毛 201007 5
啊毛 201007 6
啊毛 201007 7
啊毛 201007 8
啊毛 201007 9
啊毛 201007 10
啊毛 201007 11
啊毛 201007 12
啊毛 201007 13
啊毛 201007 14
啊毛 201007 15
啊毛 201007 16
啊毛 201007 17
啊毛 201007 18
啊毛 201007 19
啊毛 201007 20
啊毛 201007 21
啊毛 201007 22
啊毛 201007 23
啊毛 201007 24
啊毛 201007 25
啊毛 201007 26
啊毛 201007 27
啊毛 201007 28
啊毛 201007 29
啊毛 201007 30
啊毛 201007 31
斯大林 201007 1 F
斯大林 201007 2 A
斯大林 201007 3 B
斯大林 201007 4 SDG
斯大林 201007 5
斯大林 201007 6
斯大林 201007 7
斯大林 201007 8
斯大林 201007 9
斯大林 201007 10
斯大林 201007 11
斯大林 201007 12
斯大林 201007 13
斯大林 201007 14
斯大林 201007 15
斯大林 201007 16
斯大林 201007 17
斯大林 201007 18
斯大林 201007 19
斯大林 201007 20
斯大林 201007 21
斯大林 201007 22
斯大林 201007 23
斯大林 201007 24
斯大林 201007 25
斯大林 201007 26
斯大林 201007 27
斯大林 201007 28
斯大林 201007 29
斯大林 201007 30
斯大林 201007 31
张三 201007 1 A
张三 201007 2 A
张三 201007 3 B
张三 201007 4 D
张三 201007 5
张三 201007 6
张三 201007 7
张三 201007 8
张三 201007 9
张三 201007 10
张三 201007 11
张三 201007 12
张三 201007 13
张三 201007 14
张三 201007 15
张三 201007 16
张三 201007 17
张三 201007 18
张三 201007 19
张三 201007 20
张三 201007 21
张三 201007 22
张三 201007 23
张三 201007 24
张三 201007 25
张三 201007 26
张三 201007 27
张三 201007 28
张三 201007 29
张三 201007 30
张三 201007 31
select '张三' fname,'201007' month_id, '部门1' f1, '部门2' f2, '部门3' f3, '部门4' f4
from dual
),
tb2 as (
select rownum day_id from dual
connect by rownum < 31
)
select tb1.fname 姓名,tb1.month_id||to_char(tb2.day_id,'00') 日期,
decode(tb2.day_id,1,tb1.f1,2,f2,3,f3,4,f4) 部门
from tb1,tb2
select username,tmonth||'01',D1 from TB1
union all
select username,tmonth||'02',D2 from TB1
union all
select username,tmonth||'03',D3 from TB1