假设我有一个时间的表A,表结构,数据如下:
year_di     year_name       quarter_id        quarter_name
2002        2002年           2002Q1           2002年第一季度
2003        2003年           2003Q1           2003年第一季度我想把它转换成一个视图B,从上述A表的数据转换到如下的结构,数据:
time_id        time_name
2002            2002年
2002Q1          2002年第一季度
2003            2003年
2003Q1          2003年第一季度如果用新建另外一个表,用insert语句插入去倒是可以很容易实现
但是用视图的话还没有想出

解决方案 »

  1.   

    select year_id,year_name time_name from a
    union 
    select year_id,quarter_name time_name from a;
      

  2.   

    select year_id,year_name time_name from a
    union 
    select quarter_id,quarter_name time_name from a
    order by year_id desc
      

  3.   

    select * from (
    select year_id,year_name time_name from a
    union 
    select quarter_id,quarter_name time_name from a
    ) order by year_id desc
      

  4.   

    以上都有错
    正确的如下:
    select a.YearID as time_id,a.YearName as time_name from  a
    union
    select a.quaterID as time_id,a.quaterName as time_name from  a
    union
    select a.halfYearID as time_id,a.halfYearName as time_name from  a
    union
    select a.monthID as time_id,a.monthName as time_name from  a
      

  5.   


    select a.YearID as time_id,a.YearName as time_name from  a
    union
    select a.quaterID as time_id,a.quaterName as time_name from  a
      

  6.   

    select year_id,year_name time_name from a
    union 
    select quarter_id,quarter_name time_name from a
    order by year_id desc
      

  7.   

    select * from (
    select year_di time_id,year_name time_name from A
    union all
    select quarter_id,quarter_name from A) order by time_id
      

  8.   

    注意是union all 不是union,如果光写union 它是会消除重复的,数据不但有可能不对,而且效率的影响很大,因为union需要做全表扫描,union all不要如:UNION指定组合多个结果集并将其作为单个结果集返回。ALL在结果中包含所有的行,包括重复行。如果没有指定,则删除重复行。
      

  9.   

    select * from (
    select year_di time_id,year_name time_name from A
    union all
    select quarter_id,quarter_name from A) order by time_id