原始数据:  tag_id   lbl_text   lang_id
  greet      你好     ch
  greet      hello    en
  greet      哈依     jp期望达到的结果: tag_id  lang_desc 1 lang_desc2  lang_desc3
 greet   你好          hello      哈依目前lang_id是固定的,据说decode函数可以解决这个问题。
如果lang_id是动态的多列又如何解决呢?
希望高手提供解决方案,不胜感激!

解决方案 »

  1.   

    谢谢,我目前只需要用decode函数转换,因为lang_id只有3列是固定的,不需要太复杂的动态转换
      

  2.   


    with tb as(
    select 'greet' tag_id,'你好' lbl_text,'ch' lang_id from dual union all
    select 'greet','hello','en' from dual union all
    select 'greet','哈依','jp' from dual)
    --以上为提供数据的语句
    select tag_id,max(decode(lang_id,'ch',lbl_text)) ch,
           max(decode(lang_id,'en',lbl_text)) en,
           max(decode(lang_id,'jp',lbl_text)) jp
    from tb
    group by tag_idTAG_I CH    EN    JP
    ----- ----- ----- -----
    greet 你好  hello 哈依
      

  3.   


    SELECT  tag_id,
            Max(Decode(lang_id,'ch',lbl_text,NULL)) lang_desc1,
            Max(Decode(lang_id,'en',lbl_text,NULL)) lang_desc2,
            Max(Decode(lang_id,'jp',lbl_text,NULL)) lang_desc3  
    FROM tab
    GROUP BY tag_id
      

  4.   

    非常感谢,为什么要用max函数,是保证转换后只有一条记录吗?
      

  5.   

    保证转换后只有一条记录吗?
    --其实本来也只有一条记录,但是group by 需要和聚合函数一起使用 所以用max 
      

  6.   

    呀~~zhuomingwang!!拿牌牌了,散个分庆祝下~嘎嘎。恭喜啊!
      

  7.   

    因为要配合group by,不用max会出错的,并不是为了取最大
      

  8.   

    碰到了新问题,lang_id ='jp' 对应的 lbl_text 可能为空或者null,我不需要显示这种数据,请问怎么过滤? and (lbl_txt is not null or lbl_txt <> '') 貌似不起作用阿?
      

  9.   

    select sum(decode(lang_id,'ch', lbl_text,null)) as "lang_desc1",
    sum(decode(lang_id,'en',lbl_text,null)) as "lang_desc2",
    sum(decode(lang_id,'jp',lbl_text,null)) as "lang_desc3"
    from table_name
    group by tag_id如果是动态的,就得需要存储过程了
      

  10.   


    链接?不了解,能直接给出SQL吗?谢谢
      

  11.   

    把select lang_id ='jp' 的这一个查询去掉不就行了
      

  12.   

    SQL> with tb as(
      2  select 'greet' tag_id,'你好' lbl_text,'ch' lang_id from dual union all
      3  select 'greet','hello','en' from dual union all
      4  select 'greet',' ','en' from dual union all
      5  select 'greet',null,'jp' from dual union all
      6  select 'greet','哈依','jp' from dual)
      7  select tag_id,max(decode(lang_id,'ch',lbl_text)) lang_desc1,
      8  max(decode(lang_id,'en',lbl_text)) lang_desc2,
      9  max(decode(lang_id,'jp',lbl_text)) lang_desc3
     10  from tb
     11  where replace(lbl_text,' ','') is not null
     12  group by tag_id
     13  /
     
    TAG_ID LANG_DESC1 LANG_DESC2 LANG_DESC3
    ------ ---------- ---------- ----------
    greet  你好       hello      哈依