select 姓名 ,1日 from your_table union all select 姓名 ,2日 from your_table union all select 姓名 ,3日 from your_table ......
select 姓名 ,1日 from your_table where 月份= ?? 日 = ?? union all select 姓名 ,2日 from your_table where 月份= ?? 日 = ?? union all select 姓名 ,3日 from your_table where 月份= ?? 日 = ?? ......
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,tb2.day_id, decode(tb2.day_id,1,tb1.f1,2,f2,3,f3,4,f4) f_department from tb1,tb2
create table tb ( tname varchar2(10), tm varchar2(10), a1 varchar2(10), a2 varchar2(10), a3 varchar2(10), a4 varchar2(10) )insert into tb select '无念','201007','1','2','3','4' from dual; commit;select tname 姓名, tm || decode(length(lv), 1, '0' || lv, lv) as 日期, decode(lv, 1, a1, 2, a2, 3, a3, 4, a4) as 数据 from (select t.*, level lv from tb t connect by level < 32) t;改进下——
还是不要用LEVEL,,,否则会悲剧,哈哈,我测试过了
我用这个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
union all
select 姓名 ,2日 from your_table
union all
select 姓名 ,3日 from your_table
......
union all
select 姓名 ,2日 from your_table where 月份= ?? 日 = ??
union all
select 姓名 ,3日 from your_table where 月份= ?? 日 = ??
......
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
而且并不是所有的月份都是31日的,你的业务需要是必须按实际月份进行?还是2月31日都可以存在,这个无关系?
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
create table tb
(
tname varchar2(10),
tm varchar2(10),
a1 varchar2(10),
a2 varchar2(10),
a3 varchar2(10),
a4 varchar2(10)
)insert into tb select '无念','201007','1','2','3','4' from dual;
commit;select tname 姓名,
tm || decode(length(lv), 1, '0' || lv, lv) as 日期,
decode(lv, 1, a1, 2, a2, 3, a3, 4, a4) as 数据
from (select t.*, level lv from tb t connect by level < 32) t;改进下——
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