表tb
字段(varchar型) A
0
B
C
0
D
...
"0"是数字
用sql怎样排序得到:A
B
C
D
0
0
...
也就是要实现对成绩的降序排序,A代表的成绩大于B代表的成绩,我试过了用
select from tb order by desc
结果是:
D
C
B
A
0
0
...
用select from tb order by
结果是:
0
0
A
B
C
D
...
字段(varchar型) A
0
B
C
0
D
...
"0"是数字
用sql怎样排序得到:A
B
C
D
0
0
...
也就是要实现对成绩的降序排序,A代表的成绩大于B代表的成绩,我试过了用
select from tb order by desc
结果是:
D
C
B
A
0
0
...
用select from tb order by
结果是:
0
0
A
B
C
D
...
如果字段不是表的字段,而是这样
表tb
字段成绩(varchar型)
学号 姓名 课程 成绩
1 aa 语文 A
1 aa 数学 B
1 aa 总分 A+B
2 bb 语文 0
2 bb 数学 0
2 bb 总分 0
3 cc 语文 B
3 cc 数学 C
3 cc 总分 B+C
现要用实现
学号 姓名 语文 数学 总分
1 aa A B A+B
3 cc B C B+C
2 bb 0 0 0
我用了:
declare @s varchar(8000)
set @s='select 学号,姓名
select @s=@s+',['+课程+']=isnull(max(case when 课程='''+课程+''' then convert(char(10),成绩,108) end),null)' from View3 group by 课程
exec(@s+' from View3 group by 学号,姓名,性别 order by 总分)order by 后应该改成什么样?才能得到需要的结果?
select 1 as 学号, 'aa' as 姓名, '语文' as 课程, 'A' as 成绩
into tb
union select 1, 'aa', '数学', 'B'
union select 1, 'aa', '总分', 'A+B'
union select 2, 'bb', '语文', '0'
union select 2, 'bb', '数学', '0'
union select 2, 'bb', '总分', '0'
union select 3, 'cc', '语文', 'B'
union select 3, 'cc', '数学', 'C'
union select 3, 'cc', '总分', 'B+C'
--------------------------------------
declare @s varchar(8000)
set @s = 'select * from (select 学号,姓名'
select @s = @s + ', ['+课程+'] = max(case when 课程 = ''' + 课程 + ''' then convert(char(10), 成绩, 108) end)'
from tb group by 课程
set @s = @s + ' from tb group by 学号,姓名) a order by case 总分 when ''0'' then ''F'' else 总分 end'
exec(@s)
/*
学号 姓名 数学 语文 总分
1 aa B A A+B
3 cc C B B+C
2 bb 0 0 0
*/
--------------------------------------
drop table tb
服务器: 消息 207,级别 16,状态 3,行 20
列名 '课程' 无效。
服务器: 消息 207,级别 16,状态 1,行 20
列名 '课程' 无效。
服务器: 消息 207,级别 16,状态 1,行 20
列名 '课程' 无效。