insert into #tb values(1,'张三' , '语文' , 'a')
insert into #tb values(2,'张三' , '数学' , 'b')
insert into #tb values(3,'张三' , '物理' , 'c')
insert into #tb values(4,'李四' , '语文' , 'd')
insert into #tb values(5,'李四' , '数学' , 'e')
insert into #tb values(6,'李四' , '物理' , 'f')
select * from #tb
drop table #tb
我现在想实现的是:课程成为列名、然后分值对应到下面。怎么实现?
谢谢.... 我看着有转换成xml的、有用case的、有用函数PIVOT的啊 给我提供一个思路或者是存储过程呗。。
21 个解决方案
#1
SELECT 姓名, MAX(CASE 课程 WHEN '语文' THEN 分值 ELSE 0 END) AS '语文', MAX(CASE 课程 WHEN '数学' THEN Score ELSE 0 END) AS '数学', MAX(CASE 课程 WHEN '物理' THEN Score ELSE 0 END) AS '物理' FROM [#tb] GROUP BY 姓名
#3
看清楚哦。。。呵呵。。没看清我怎么写的呢
#5
哎...还有别的么?
#6
#7
SELECT 姓名,语文,数学,物理 FROM
(
select 姓名,课程,分值 from #tb
) AS a
PIVOT
(
MAX(分值) FOR 课程 IN (语文,数学,物理)
) AS pvt
(
select 姓名,课程,分值 from #tb
) AS a
PIVOT
(
MAX(分值) FOR 课程 IN (语文,数学,物理)
) AS pvt
#8
姓名 语文 数学 物理
李四 d e f
张三 a b c
李四 d e f
张三 a b c
#9
max()里面能是文本么?
#10
你真人讨厌
#11
MAX(列名)
#12
最好别用中文来定义表啊,列啊啥的
#13
我就要的是你的写的结果啊。可是你这样是不行的。max是聚合函数啊 我的值是文本啊。不能max的啊
#14
你的值再怎么是文本也在某一列里吧?
此处加聚合函数的意思是
如果你有多条数据 例如
create table #tb(id int ,姓名 varchar(10) , 课程 varchar(10) , 分值 varchar(10) )
insert into #tb values(1,'张三' , '语文' , 'a')
insert into #tb values(2,'张三' , '数学' , 'b')
insert into #tb values(3,'张三' , '物理' , 'c')
insert into #tb values(4,'李四' , '语文' , 'd')
insert into #tb values(5,'李四' , '数学' , 'e')
insert into #tb values(6,'李四' , '物理' , 'f')
insert into #tb values(6,'李四' , '物理' , 'g') -- 此处有2个李四的物理成绩,得用聚合函数合并,至于如何合并,取决于你,我一般都是用MAX来定义的,其实此处出现2个李四的物理成绩是错误的,应该在录入的时候就提醒录入的人。
此处加聚合函数的意思是
如果你有多条数据 例如
create table #tb(id int ,姓名 varchar(10) , 课程 varchar(10) , 分值 varchar(10) )
insert into #tb values(1,'张三' , '语文' , 'a')
insert into #tb values(2,'张三' , '数学' , 'b')
insert into #tb values(3,'张三' , '物理' , 'c')
insert into #tb values(4,'李四' , '语文' , 'd')
insert into #tb values(5,'李四' , '数学' , 'e')
insert into #tb values(6,'李四' , '物理' , 'f')
insert into #tb values(6,'李四' , '物理' , 'g') -- 此处有2个李四的物理成绩,得用聚合函数合并,至于如何合并,取决于你,我一般都是用MAX来定义的,其实此处出现2个李四的物理成绩是错误的,应该在录入的时候就提醒录入的人。
#15
我没有写错吧?
#16
七楼正解,我试了,不错,正想学学这个。
#17
7楼正解,试试吧楼主
#18
学习了,顶一下。。
#19
max里面是文本
#20
请大家看好啊。。哎 我那是 a b c d 不是数字
#21
sql有 PIVOT 关键字,你可查一查帮助.
#1
SELECT 姓名, MAX(CASE 课程 WHEN '语文' THEN 分值 ELSE 0 END) AS '语文', MAX(CASE 课程 WHEN '数学' THEN Score ELSE 0 END) AS '数学', MAX(CASE 课程 WHEN '物理' THEN Score ELSE 0 END) AS '物理' FROM [#tb] GROUP BY 姓名
#2
#3
看清楚哦。。。呵呵。。没看清我怎么写的呢
#4
#5
哎...还有别的么?
#6
#7
SELECT 姓名,语文,数学,物理 FROM
(
select 姓名,课程,分值 from #tb
) AS a
PIVOT
(
MAX(分值) FOR 课程 IN (语文,数学,物理)
) AS pvt
(
select 姓名,课程,分值 from #tb
) AS a
PIVOT
(
MAX(分值) FOR 课程 IN (语文,数学,物理)
) AS pvt
#8
姓名 语文 数学 物理
李四 d e f
张三 a b c
李四 d e f
张三 a b c
#9
max()里面能是文本么?
#10
你真人讨厌
#11
MAX(列名)
#12
最好别用中文来定义表啊,列啊啥的
#13
我就要的是你的写的结果啊。可是你这样是不行的。max是聚合函数啊 我的值是文本啊。不能max的啊
#14
你的值再怎么是文本也在某一列里吧?
此处加聚合函数的意思是
如果你有多条数据 例如
create table #tb(id int ,姓名 varchar(10) , 课程 varchar(10) , 分值 varchar(10) )
insert into #tb values(1,'张三' , '语文' , 'a')
insert into #tb values(2,'张三' , '数学' , 'b')
insert into #tb values(3,'张三' , '物理' , 'c')
insert into #tb values(4,'李四' , '语文' , 'd')
insert into #tb values(5,'李四' , '数学' , 'e')
insert into #tb values(6,'李四' , '物理' , 'f')
insert into #tb values(6,'李四' , '物理' , 'g') -- 此处有2个李四的物理成绩,得用聚合函数合并,至于如何合并,取决于你,我一般都是用MAX来定义的,其实此处出现2个李四的物理成绩是错误的,应该在录入的时候就提醒录入的人。
此处加聚合函数的意思是
如果你有多条数据 例如
create table #tb(id int ,姓名 varchar(10) , 课程 varchar(10) , 分值 varchar(10) )
insert into #tb values(1,'张三' , '语文' , 'a')
insert into #tb values(2,'张三' , '数学' , 'b')
insert into #tb values(3,'张三' , '物理' , 'c')
insert into #tb values(4,'李四' , '语文' , 'd')
insert into #tb values(5,'李四' , '数学' , 'e')
insert into #tb values(6,'李四' , '物理' , 'f')
insert into #tb values(6,'李四' , '物理' , 'g') -- 此处有2个李四的物理成绩,得用聚合函数合并,至于如何合并,取决于你,我一般都是用MAX来定义的,其实此处出现2个李四的物理成绩是错误的,应该在录入的时候就提醒录入的人。
#15
我没有写错吧?
#16
七楼正解,我试了,不错,正想学学这个。
#17
7楼正解,试试吧楼主
#18
学习了,顶一下。。
#19
max里面是文本
#20
请大家看好啊。。哎 我那是 a b c d 不是数字
#21
sql有 PIVOT 关键字,你可查一查帮助.