您的位置:首页 > 数据库

一个sql中常遇到的表结构转换问题

2007-12-25 17:06 316 查看
score表结构如

name subject score

-----------------------------------

大都 语文 59

大都 数学 78

大都 外语 89

大都 物理 98

小都 语文 90

小都 外语 80

小都 物理 70

德国 语文 90

德国 数学 50

德国 外语 80

德国 物理 89

哈哈 语文 99

哈哈 数学 80

哈哈 物理 89

现需转换成表结构如:

姓名 数学 外语 物理 语文

-----------------------------------------

大都 78 89 98 59

德国 50 80 89 90

哈哈 80 0 89 99

小都 0 80 70 90

解决之道:

--当出现的subject的个数不定的时候

declare @sql varchar(8000)

set @sql='SELECT name as 姓名'

select @sql=@sql+',['+subject+']=MAX(CASE subject WHEN '''+subject+''' THEN score ELSE 0 END)' from score group by subject

exec(@sql+' FROM score GROUP BY name')

--当出现的subject的个数确定的时候

select name as 姓名,

数学=MAX(CASE WHEN subject='数学' THEN score ELSE 0 END),

外语=MAX(CASE WHEN subject='外语' THEN score ELSE 0 END),

物理=MAX(CASE WHEN subject='物理' THEN score ELSE 0 END),

语文=MAX(CASE WHEN subject='语文' THEN score ELSE 0 END)

from score

group by name
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: