Oracle
现在我有一个表有几个字段.
表结构如下
prjid      procid content1 content2 content3 relateflag  createdate             userid
2009A001   300     233       a      审计总金额    1      2009-5-25 18:06:03        admin
2009A001   300     234       b      违法金额      2      2009-5-25 18:06:03        admin
2009A001   300     235       c      违规金额      3      2009-5-25 18:06:03        admin
2009A001   300     236       d      增收节支      4      2009-5-25 18:06:03        admin2009A002   300     233       a      审计总金额    1      2009-5-25 18:06:03        admin
2009A002   300     234       b      违法金额      2      2009-5-25 18:06:03        admin
2009A002   300     235       c      违规金额      3      2009-5-25 18:06:03        admin
2009A002   300     236       d      增收节支      4      2009-5-25 18:06:03        admin2009A003   300     233       a      审计总金额    1      2009-5-25 18:06:03        admin
2009A003   300     234       b      违法金额      2      2009-5-25 18:06:03        admin
2009A003   300     235       c      违规金额      3      2009-5-25 18:06:03        admin
2009A003   300     236       d      增收节支      4      2009-5-25 18:06:03        admin我想把这12条数据合并成一条数据怎么办? procid 是不变的固定为300 合并之后的数据如下
prjid      procid  content1  content2 content3 content4  createdate               userid
2009A001   300     233       234       235       236      2009-5-25 18:06:03        admin
2009A002   300     233       234       235      236      2009-5-25 18:06:03        admin
2009A003   300     233       234       235      236      2009-5-25 18:06:03        admin请求各位大虾帮帮忙解决!小弟感激不尽!!!小弟初到CSDN.分数貌似不多!!还望各位大虾不要介意!
本人在线等.!!谢谢!!!!

解决方案 »

  1.   

    你的示例数据不好
    照你的数据
    select distinct prjid,procid,233 content1,234 content2,235 content3,236 content4,createdate,userid 
    from 表
      

  2.   

    -- Create table
    create table T_TEST
    (
      PRJID    VARCHAR2(20),
      PROCID   NUMBER(20),
      CONTENT1 NUMBER(20),
      CONTENT2 VARCHAR2(1)
    )
    表中数据
    prjid        procid  content1  content2
    2009A001 300 233 a
    2009A001 300 234 b
    2009A001 300 235 c
    2009A001 300 236 d
    2009A002 300 233 a
    2009A002 300 234 b
    2009A002 300 235 c
    2009A002 300 236 d
    2009A003 300 233 a
    2009A003 300 234 b
    2009A003 300 235 c
    2009A003 300 236 dselect t.prjid,max(t.procid) procid,
    (select content1 from t_test where content2 = 'a' and prjid=t.prjid) content1,
    (select content1 from t_test where content2 = 'b' and prjid=t.prjid) content2,
    (select content1 from t_test where content2 = 'c' and prjid=t.prjid) content3,
    (select content1 from t_test where content2 = 'd' and prjid=t.prjid) content4
    from t_test t group by t.prjid执行结果:
    prjid      procid  content1  content2 content3 content4
    2009A001 300 233 234 235 236
    2009A002 300 233 234 235 236
    2009A003 300 233 234 235 236
      

  3.   


    这个确实是可以的.但是如果. content2的值不是a,b,c,d来的.比如是 c,d,v,a,a,c,s,f,w,d,e,f等等这些.
    好像也不可以了噢.
      

  4.   


    那你总要有个规律吧,什么时候content1的值作为content1,什么时候作为content2,什么时候作为content3,什么时候作为content4。
    根据条件将我的SQL改改就成了
      

  5.   

    不一定噢.如果根本就是没规律的勒?难不成.用户在输入数据的时候还想规律去填?
    lihui_shine  不知道还有更好的办法没有!?
      

  6.   

    关键是content1 content2 content3这三个字段在合并后的取值规则,
    还是说有几条ROW就有几个CONTENTN的字段,如果是这样的情况,是行转列的问题,最好用存储过程处理,如果是第一条情况,你要说明规则
      

  7.   


    合并后就是连着 content1 content2 content3  
    content1对应的值为2009A001 第一行的值.
    content2对应的值为2009A001 第二行的值.
    content3对应的值为2009A001 第三行的值.
    content4对应的值为2009A001 第四行的值.但是现在的数据就根本是没有规则而言的.!
    存储过程我不怎么会写.
    呵呵.期待还有没有更好的!