分类: 数据库开发技术
2012-02-23 18:23:32
很早之前就遇到网友说过sql查询中的行转列。刚好有两个分类别的行转列。
创建一个测试表sc
Create table sc(sid number ,cid varchar2(10) ,grade number)
SID CID GRADE
20060101 语文 98.1
20060102 语文 65.5
20060101 数学 87.6
20060102 数学 88.6
20060101 英语 65.2
20060102 英语 79.9
20060103 语文 61.2
20060103 数学 66.5
20060103 英语 83.9
利用case when
Select sid,
sum(case when cid=’语文’ then grade end) 语文,
sum(case when cid=’数学’ then grade end) 数学,
sum(case when cid=’英语’ then grade end) 英语
from sc group by sid order by sid
或者利用decode
Select sid,
Sum(Decode(cid,’语文’,grade)) 语文,
Sum(decode(cid,’数学’ ,grade)) 数学,
Sum(decode(cid,’英语’,grade)) 英语
From sc group by sid order by sid
前些天又接触了oracle另一个函数wmsys.wm_concat(a)实现不同行的列字符串连接
select sid,
wmsys.wm_concat(grade) from sc group by sid order by sid
sid wmsys.wm_concat(grade)
20111001 98.9,87.9,87.9
20111002 89.9,85.8,87.9
20111003 87.9,89.5
Wmsys.wm_concat(a)函数实现了不同列合并到同一column上。