首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > oracle >

sql多行转多列,中文没办法聚集的有关问题

2013-01-27 
sql多行转多列,中文没办法聚集的问题?我要将下表选项答案姓名爱好篮球bruce年龄28bruce性别男bruce城市whb

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


  select '城市', 'js', 'jack'
    from dual
  union all
  select '爱好', '羽毛球 ', 'jim'
    from dual
  union all
  select '年龄', '22', 'jim'
    from dual
  union all
  select '性别', '男', 'jim'
    from dual
  union all
  select '城市', 'sd', 'jim' from dual)

select 姓名,
       max(decode(选项, '爱好', 答案)) as 爱好,
       max(decode(选项, '年龄', 答案)) as 年龄,
       max(decode(选项, '性别', 答案)) as 性别,
       max(decode(选项, '城市', 答案)) as 城市
  from test
 group by 姓名;

热点排行