TABLE1 有字段:姓名;月份;1日;2日;........31日
现在我需要建立一张视图,将某人对应某天变成一条记录显示。
也就是变成 TABLE2 有字段: 姓名;日期
急,在线等,老板急着要呢。

解决方案 »

  1.   

    select 姓名 ,1日 from your_table
    union all 
    select 姓名 ,2日 from your_table
    union all 
    select 姓名 ,3日 from your_table
    ......
      

  2.   

    select 姓名 ,1日 from your_table where 月份= ?? 日 = ??
    union all  
    select 姓名 ,2日 from your_table where 月份= ?? 日 = ??
    union all  
    select 姓名 ,3日 from your_table where 月份= ?? 日 = ??
    ......
      

  3.   

    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
      

  4.   

    你这样的需求可能要写动态SQL了——
    而且并不是所有的月份都是31日的,你的业务需要是必须按实际月份进行?还是2月31日都可以存在,这个无关系?
      

  5.   

    修改一下楼上的,另外 31 应该根据月份得到。 而且1日;2日;........31日 的字段没列安么多,所以decode函数里应该全部列出。 是列转行的问题。with tb1 as (
         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    
      

  6.   


    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;改进下——
      

  7.   

    还是不要用LEVEL,,,否则会悲剧,哈哈,我测试过了
      

  8.   

    我用这个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
      

  9.   

    如果不想写这么长,可以使用一个存储过程来动态拼接生成一个SQL并执行。