日期:2014-05-17  浏览次数:20987 次

sql多行转多列,中文没办法聚集的问题?
我要将下表
选项      答案       姓名
爱好      篮球       bruce
年龄      28        bruce
性别      男         bruce
城市      wh         bruce
爱好      足球       jack
年龄      25         jack
性别      男         jack
城市      js         jack
爱好      羽毛球     jim
年龄      22         jim
性别      男         jim
城市      sd         jim
转换为
姓名  爱好  年龄  性别  城市
bruce 篮球  28    男    wh
jack  足球  25    男    js
jim   羽毛球22    男    sd
的sql语句怎么写?
sql 多行转多列 聚集不了

------解决方案--------------------
SELECT WM_CONCAT(CASE WHEN V_OPTION = '爱好' THEN T.V_CONTENT ELSE NULL END) COLUMN1,
WM_CONCAT(CASE WHEN V_OPTION = '年龄' THEN T.V_CONTENT ELSE NULL END) COLUMN2,
WM_CONCAT(CASE WHEN V_OPTION = '性别' THEN T.V_CONTENT ELSE NULL END) COLUMN3,
WM_CONCAT(CASE WHEN V_OPTION = '城市' THEN T.V_CONTENT ELSE NULL END) COLUMN4
FROM MY_TABLE T
GROUP BY T.V_NAME

------解决方案--------------------
 select 姓名, 
 max(decode(选项,'爱好',答案)) 爱好,
 max(decode(选项,'年龄',答案)) 年龄,
 max(decode(选项,'性别',答案)) 性别,
 max(decode(选项,'城市',答案)) 城市
 from t group by 姓名;

------解决方案--------------------

with test as
 (select '爱好' 选项, '篮球' 答案, 'bruce' 姓名
    from dual
  union all
  select '年龄', '28', 'bruce'
    from dual
  union all
  select '性别', '男', 'bruce'
    from dual
  union all
  select '城市', 'wh', 'bruce'
    from dual
  union all
  select '爱好', '足球', 'jack'
    from dual
  union all
  select '年龄', '25', 'jack'
    from dual
  union all
  select '性别', '男', 'jack'
    from dual
  union all