表结构如下,共7个:user
--------------------
user_id   user_name
user_add
------------------------------
user_id   add_type_id   add_id
add_type
--------------------------------
add_type_id   add_type
address
-----------------------
add_id    address
user_phone
--------------------------------------
user_id     phone_type_id    phone_id
phone_type
--------------------------
phone_type_id   phone_type
phone
----------------
phone_id   phone想输出以下结果:
user_name   add_type(1)  address(1)  add_type(2)   address(2)  phone_type(1)   phone(1)   phone_type(2)   phone(2)
-------------------------------------------------------------------------------------------------------------------
admin     home         no22, st     office       no99,rd      home         111111111     null           null
operator     home        no32, st      null          null        home         333333333     mobile       22222222  
* null 是指查到相应结果为空.不知道大家看明白了没,我折腾了好久都没选出来,不是缺值,就是数值重复,请高人指点,多谢!!!
由于页面限制,输出行出现了错位, 输出结果可能看起来别扭,请将其Copy到记事本里,能看的更直观,更清楚些,见谅

解决方案 »

  1.   

    表如下:
    ID  NO   Name  Course  Score 
    1   001  赵      语文   80
    2   001  赵      数学   40
    3   001  赵      英语   60
    4   002  李      语文   50
    5   002  李      数学   30
    6   003  唐      语文   20
    Sql语句执行结果如下:
    NO         Name         AllCouse                   总分
    001         赵          语文,数学,英语            180
    002         李          语文,数学                  80
    003         唐          语文                        20
    select no,name,yw||xx||yy AllCouse,"语文"+"数学"+"英语" 总分 from
    (select no,name, case when 语文<>0 then '语文' end yw,case when 数学<>0 then ',数学' end xx,case when 英语<>0 then ',英语' end yy,
    "语文","数学","英语" from 
    (select no,name ,nvl(sum("语文"),0) "语文",nvl(sum("数学"),0) "数学",nvl(sum("英语"),0) "英语"
    from (select no,name,
    case when Course='语文'  then nvl(SUM(score),0) end "语文",
    case when Course='数学'  then nvl(SUM(score),0) end "数学",
    case when Course='英语'  then nvl(SUM(score),0) end "英语"from lht_test
    group by no,name,course) t
    group by no,name) tt) ttt
    楼主参考一下,使用遍历把记录横过来。