select a.ID,a1.data,a2.data,a3.data,a4.data 
from test a,
     (select ID,data from test where Type_ID=1) a1,
     (select ID,data from test where Type_ID=2) a2,
     (select ID,data from test where Type_ID=3) a3,
     (select ID,data from test where Type_ID=4) a4
where a.ID=a1.ID(+)
  and a.ID=a2.ID(+)
  and a.ID=a3.ID(+)
  and a.ID=a4.ID(+)

解决方案 »

  1.   

    select a.ID,a1.data,a2.data,a3.data,a4.data 
    from test a,
         (select ID,data from test where Type_ID=1) a1,
         (select ID,data from test where Type_ID=2) a2,
         (select ID,data from test where Type_ID=3) a3,
         (select ID,data from test where Type_ID=4) a4
    where a.ID=a1.ID
      and a.ID=a2.ID
      and a.ID=a3.ID
      and a.ID=a4.ID
    order by a2.ID,a3.ID
      

  2.   

    up 你好相差了一个order by,我给你加上
      

  3.   

    综合上面(借花献拂)
    select distinct a.ID ,a1.data,a2.data,a3.data,a4.data 
    from test a,
         (select ID,data from test where Type_ID=1) a1,
         (select ID,data from test where Type_ID=2) a2,
         (select ID,data from test where Type_ID=3) a3,
         (select ID,data from test where Type_ID=4) a4
    where a.ID=a1.ID(+)
      and a.ID=a2.ID(+)
      and a.ID=a3.ID(+)
      and a.ID=a4.ID(+) 
    order by a1.data,a2.data;  
      

  4.   

    to  zhenyukeji(何处是我家):
    说说你的想法?
    另外(+)是什么意思?to nyangpro(阿宁):
    也说说你的想法?
      

  5.   

    select id, sum(decode(type_id,1,data,0)) type_id=1,
               sum(decode(type_id,2,data,0)) type_id=2,
               sum(decode(type_id,3,data,0)) type_id=3,
               sum(decode(type_id,4,data,0)) type_id=4
    group by id
    order by 3,4
      

  6.   

    sorry!试试:select id, sum(decode(type_id,1,data,0)) type_id1,
               sum(decode(type_id,2,data,0)) type_id2,
               sum(decode(type_id,3,data,0)) type_id3,
               sum(decode(type_id,4,data,0)) type_id4
    from yourtable
    group by id
    order by 3,4
      

  7.   

    呵呵,上面还是错的!试试这个吧:
    select * from 
        (select id, max(decode(type_id,1,data,'0')) type1,
                    max(decode(type_id,2,data,'0')) type2,
                    max(decode(type_id,3,data,'0')) type3,
                    max(decode(type_id,4,data,'0')) type4
         from yourtable
         group by id) a
    order by a.type2,a.type3
      

  8.   

    8i:
    http://tahiti.oracle.com/pls/tahiti/tahiti.docindex9i:
    http://tahiti.oracle.com/pls/db901/db901.docindex?re=homepage#index-SQL
      

  9.   

    type1,type2……等是什么意思?是type_id=1吗?
      

  10.   

    to  cyberflying(雁南飞):
    在上面的网址里没有找到(+)?
      

  11.   

    to  cyberflying(雁南飞):
    出来了!!!
    能解释一下你的SQL语句?十分感谢
      

  12.   

    (+)就是oracle的外连接语法
    (+)在左面是右连接
    (+)在右面是左连接
    你看一下decode的语法就会明白了
      

  13.   

    to yanleigis(可可) :
    不加distinct 可以得到数据,可是不是三条记录,而是12条
    加上distinct 错误为:不是 SELECTed 表达式to zhenyukeji(何处是我家) :
    加(+)和不加出来的结果一样?为什么加(+)?能解释一下吗?to  cyberflying(雁南飞) :
    四个都加max,是不是表示按照四个排序,而不是我说的两个?
    如果只按照其中几个排序的话,怎么写?
      

  14.   

    a.ID=a1.ID时
    如a1.data为NULL
    不加(+)该记录不显示
    加(+)该记录显示为:
    ID Type_ID=1 Type_ID=2  Type_ID=3  Type_ID=4
    1              杨          二        北京
      

  15.   

    对最好加(+),oracle是怎么处理(+)的
      

  16.   

    to 楼主:yanleigis(可可)那个应该可以吧。
    select * from 
        (select id, max(decode(type_id,1,data,'0')) type1,
                    max(decode(type_id,2,data,'0')) type2,
                    max(decode(type_id,3,data,'0')) type3,
                    max(decode(type_id,4,data,'0')) type4
         from yourtable
         group by id) a
    order by a.type2,a.type3这个是用decode()把每一行都转换成你所要求的格式(在相应的type下面放data的值,其他的补个'0'),然后按id分组,去最大的data,因为从你的data的值看来,都会比'0'大的,所以用max()。排序是order by a.type2,a.type3,和max()无关的
      

  17.   

    (+)外部连接的意思是保证在select语句中主表字段下的所有数据全部检索出来,
    不过呢
    令人伤心的是
    它无法支持过滤
      

  18.   

    我试了一下yanleigis(可可)的语句
    没有问题,是我看错了,不好意思:)