问题是这样的   有三个表  A.B.C   a表是学生表,c表式检查项目表 ,b表是结果表
A 表结构  aID  Name  。。
          01   tom
          02   jack
          03   james
          04   kevin
          ......
C 表结构  itemID itemName
            01      身高
            02      体重
            03      视力
            04      味觉
            05      嗅觉
            06      心肺
            07      心电图
             .........
B 表结构  bID  aID   itemID   itemResult
            1    01      01       合格
            2    01      02       不合格
            3    01      03       不合格
            4    02      01       不合格
            5    02      02       合格
            6    02      03       不合格
            7    03      01       合格
            8    03      03       不合格
            9    03      04       合格
           10    03      05       合格
           11    04      02       不合格
           12    04      04       合格
           ..........
期望的结果是     aID   身高    体重     视力     味觉     嗅觉    心肺    心电图
                  01   合格   不合格  不合格      -         -      -       -
                  。其中 列要根据所有的检查项目来动态取得  .有点难度 

解决方案 »

  1.   

    结果集不确定时,需要用存储过程动态SQL拼接。坛子里精华区有行转列通用过程。http://topic.csdn.net/u/20100109/13/6a10c168-f190-4766-b838-adbf03c4ac7b.html?72259
      

  2.   

    需要用存储过程来生成select .... max(decode(itemID,'01',itemResult)) as "身高", ... 这个格式的SQL语句。
      

  3.   

    行列转换的通用过程 by wildwave
    http://topic.csdn.net/u/20100109/13/6a10c168-f190-4766-b838-adbf03c4ac7b.html?64786
    这个最好啊
      

  4.   

    select b.id,b.aid,b.itemid,decode(c.itemid,'01',b.itemresult) 身高, 
    decode(c.itemid,'02',b.itemresult) 体重, decode(c.itemid,'03',b.itemresult) 视力, 
    decode(c.itemid,'04',b.itemresult) 味觉, decode(c.itemid,'05',b.itemresult) 嗅觉 
    from c,b where c.itemid=b.itemid 
      

  5.   

    这个已经有很多贴子了,自己可以写写SQL语句,可以完成的
    如果懒得写有大牛写的存储过程http://topic.csdn.net/u/20100109/13/6a10c168-f190-4766-b838-adbf03c4ac7b.html?64786
      

  6.   

    练手,写一个
    CREATE OR REPLACE PROCEDURE row2col(o OUT SYS_REFCURSOR) IS
      sqlstr VARCHAR2(4000) := '';
    BEGIN
      FOR cc IN (SELECT itemID, itemName FROM c) LOOP
        sqlstr := sqlstr || 'max(decode(itemID,''' || cc.itemid ||
            ''',b.itemresult)) as "' || cc.itemname || '",';
      END LOOP;
      sqlstr := 'select b.aid,' || rtrim(sqlstr,',') || ' from b group by b.aid';
      OPEN o FOR sqlstr;
    END row2col;
      

  7.   

    select b.id,b.aid,b.itemid,decode(c.itemid,'01',b.itemresult) 身高, 
    decode(c.itemid,'02',b.itemresult) 体重, decode(c.itemid,'03',b.itemresult) 视力, 
    decode(c.itemid,'04',b.itemresult) 味觉, decode(c.itemid,'05',b.itemresult) 嗅觉 
    from c,b where c.itemid=b.itemid