Chinaunix首页 | 论坛 | 博客
  • 博客访问: 600023
  • 博文数量: 96
  • 博客积分: 1464
  • 博客等级: 上尉
  • 技术积分: 1539
  • 用 户 组: 普通用户
  • 注册时间: 2011-11-12 23:24
文章分类

全部博文(96)

文章存档

2013年(29)

2012年(53)

2011年(14)

分类: 数据库开发技术

2012-02-23 18:23:32

很早之前就遇到网友说过sql查询中的行转列。刚好有两个分类别的行转列。

创建一个测试表sc

Create table scsid 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上。


阅读(798) | 评论(0) | 转发(0) |
0

上一篇:sql语句记录

下一篇:java值比较问题

给主人留下些什么吧!~~