原始数据: 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是动态的多列又如何解决呢?
希望高手提供解决方案,不胜感激!
greet 你好 ch
greet hello en
greet 哈依 jp期望达到的结果: tag_id lang_desc 1 lang_desc2 lang_desc3
greet 你好 hello 哈依目前lang_id是固定的,据说decode函数可以解决这个问题。
如果lang_id是动态的多列又如何解决呢?
希望高手提供解决方案,不胜感激!
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 哈依
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
--其实本来也只有一条记录,但是group by 需要和聚合函数一起使用 所以用max
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如果是动态的,就得需要存储过程了
链接?不了解,能直接给出SQL吗?谢谢
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 哈依