例如有一个人员统计表PRESON 字段有A,B,C(字段A表示地区名,B表示10岁到20岁的年龄,C表示20到40的年龄,) 
select * from PRESON显示为
A       B       C
地区1   3       6
地区2   4       5
地区3   6       8
现在我要显示效果为
A       地区1     地区2    地区3B        3         4        6C        6         5        8
如何实现?谢谢了

解决方案 »

  1.   

    貌似还不是简单的一维转多维的问题,使用PL/SQL可以解决这个问题,但是没有想到用一条SQL解决的方式.
      

  2.   

    琢磨了一下,我觉着这个需求没有道理...因为地区是变化的,也就是地区可能是多个,如果将地区变成列定义的话,这个表结构委实不科学.当然,如果地区是固定的话,那令当别论.CREATE TABLE PERSON(
        A VARCHAR2(20),
        B VARCHAR2(20),
        C VARCHAR2(20)
    );
    INSERT INTO PERSON VALUES('地区1','3','6');
    INSERT INTO PERSON VALUES('地区2','4','5');
    INSERT INTO PERSON VALUES('地区3','6','8');
    INSERT INTO PERSON VALUES('地区4','7','10');
    INSERT INTO PERSON VALUES('地区5','3','6');
    INSERT INTO PERSON VALUES('地区6','4','5');
    INSERT INTO PERSON VALUES('地区7','6','8');
    INSERT INTO PERSON VALUES('地区8','7','10');
    SELECT * FROM person;通过PLSQL解决,思路在,参考一下DECLARE
        TYPE T_PERSON IS TABLE OF PERSON%ROWTYPE INDEX BY BINARY_INTEGER;
        TYPE T_REC IS TABLE OF VARCHAR2(100) INDEX BY BINARY_INTEGER;
        C_PERSION T_PERSON;
        C_REC T_REC;
    BEGIN
        C_REC(1):='';    C_REC(2):='';    C_REC(3):='';
        SELECT *     BULK COLLECT INTO C_PERSION     FROM PERSON;
        FOR I IN C_PERSION.FIRST .. C_PERSION.LAST LOOP
            C_REC(1):=C_REC(1)||'    '||C_PERSION(i).A;
            C_REC(2):=C_REC(2)||'    '||C_PERSION(i).B;
            C_REC(3):=C_REC(3)||'    '||C_PERSION(i).C;
        END LOOP;
        FOR I IN 1 .. C_REC.COUNT LOOP
            DBMS_OUTPUT.PUT_LINE(C_REC(I));
        END LOOP;
    END;
        地区1    地区2    地区3    地区4    地区5    地区6    地区7    地区8
        3    4    6    7    3    4    6    7
        6    5    8    10    6    5    8    10
      

  3.   

    用wmsys.wm_concat
    http://zjy126.iteye.com/blog/1188848
      

  4.   

    http://www.dbfaq.net/FAQ/FixupQL.aspx?QuestionID=92  可以参考这文章,如果有其它也可以在此网上提。。