sql转换新问题,请大家再次帮忙

[复制链接]
查看11 | 回复7 | 2007-10-20 08:38:44 | 显示全部楼层 |阅读模式
先谢谢netdna,下午帮我解决了问题。刚看了下,表中还有很多数据现在问题更新如下:
学号
姓名学年
课程名
考试方式成绩考核方式
070101101张三20072C语言程序设计
正常考试52
考试
070101101张三20072C语言程序设计
补考1 及格
070101101张三20071大学英语1
正常考试60
考试
070101101张三20072大学英语2
正常考试48 考试
070101101张三20072大学英语2
补考1 及格
070101101张三20071体育
正常考试不及格 考查
070101101张三20071体育
补考1 及格
070101101张三20071素描
正常考试 0
考查
070101101张三20071素描
补考1
及格
070101102张三20072数据库
正常考试 NULL考试
070101103张三20072数据库
补考1 不及格


转换为:

学号
姓名学年
课程名成绩考核方式补考1
070101101张三20072C语言程序设计52 考试 及格
070101101张三20071大学英语1
60
考试
070101101张三20072大学英语2
48
考试 及格
070101101张三20071体育
不及格考查 及格
070101101张三20071素描
0
考查 及格
070101103张三20072数据库
0
考试 不及格
这样的SQL语句该怎么写呢
回复

使用道具 举报

千问 | 2007-10-20 08:38:44 | 显示全部楼层
DROP TABLE tempdb..#t
SELECT * INTO #t
FROM
(
SELECT

N'070101101' AS [学号] ,N'张三' AS [姓名],N'20072' AS [学年],N'C语言程序设计' AS[课程名], N'正常考试' AS[考试方式],
N'52' AS [成绩] , N'考试' AS [考核方式]
UNION ALL SELECT
N'070101101',N'张三', N'20072',N'C语言程序设计',N'补考1' , N'及格' , N''
UNION ALL SELECT


N'070101101',N'张三',N'20071' , N'大学英语1' ,N'正常考试' , N'60' ,
N'考试'
UNION ALL SELECT


N'070101101',N'张三',N'20072' , N'大学英语2',
N'正常考试' ,N'48' ,
N'考试'
UNION ALL SELECT


N'070101101' , N'张三',N'20072' , N'大学英语2', N'补考1' , N'及格',
N''
UNION ALL SELECT
N'070101101', N'张三',N'20071',N'体育',
N'正常考试',N'不及格', N'考查'
UNION ALL SELECT

N'070101101', N'张三',N'20071', N'体育',
N'补考1',
N'及格',
N''
UNION ALL SELECT
N'070101101', N'张三',N'20071',N'素描',
N'正常考试',N'0', N'考查'
UNION ALL SELECT

N'070101101', N'张三',N'20071', N'素描',
N'补考1',
N'及格',
N''
UNION ALL SELECT
N'070101101', N'张三',N'20072',N'数据库',
N'正常考试',NULL, N'考试'
UNION ALL SELECT

N'070101101', N'张三',N'20072', N'数据库',
N'补考1',
N'不及格',
N''

) AS T
SELECT * FROM #t
--
SELECT
[学号], [姓名], [学年], [课程名], MIN(ISNULL([成绩],N'0')) AS [成绩],
MAX([考核方式]) AS [考核方式],
CASE WHENISNUMERIC( MAX(ISNULL([成绩],N'0')) ) = 0 THEN MAX(ISNULL([成绩],N'0'))ELSE '' END AS [补考1]
FROM #t
GROUP BY [学号], [姓名], [学年], [课程名]
回复

使用道具 举报

千问 | 2007-10-20 08:38:44 | 显示全部楼层
再次感谢,但是数据多的时候会出现 新的问题
学年学期课程
成绩考试性质补考1
20072 课程设计(局域网组建) 中等 考查
中等
20071 乐理与欣赏
良好 考查 良好
20072 房屋建筑学
80 考试
20072 AutoCAD
优秀 考查
优秀
20081 体育上
良好 考查
良好
考查课 的成绩 出现在 补考1中了
[ 本帖最后由 chris_dream 于 2009-9-17 22:16 编辑 ]
回复

使用道具 举报

千问 | 2007-10-20 08:38:44 | 显示全部楼层
请用文字定义清楚
否则根据数据 不清楚 到底想实现 什么逻辑
回复

使用道具 举报

千问 | 2007-10-20 08:38:44 | 显示全部楼层
按您的做法,当成绩一列中的数据 为 “优秀”,则运行完您的语句之后,
在补考1 栏目中,多了“优秀”
回复

使用道具 举报

千问 | 2007-10-20 08:38:44 | 显示全部楼层
--甚至 考虑 了 补考2次了还有什么问题?

SELECT
[学号], [姓名], [学年], [课程名], MIN(ISNULL([成绩],N'0')) AS [成绩],
MAX([考核方式]) AS [考核方式],
CASE WHENISNUMERIC( MAX(ISNULL(
CASE WHEN [考试方式] = N'补考1' THEN [成绩] ELSE NULL END
,N'0')) ) = 0 THEN MAX(ISNULL(
CASE WHEN [考试方式] = N'补考1' THEN [成绩] ELSE NULL END
,N'0'))ELSE '' END AS [补考1],
CASE WHENISNUMERIC( MAX(ISNULL(
CASE WHEN [考试方式] = N'补考2' THEN [成绩] ELSE NULL END
,N'0')) ) = 0 THEN MAX(ISNULL(
CASE WHEN [考试方式] = N'补考2' THEN [成绩] ELSE NULL END
,N'0'))ELSE '' END AS [补考2]
FROM #t
GROUP BY [学号], [姓名], [学年], [课程名]
[ 本帖最后由 netdna 于 2009-9-18 10:52 编辑 ]
回复

使用道具 举报

千问 | 2007-10-20 08:38:44 | 显示全部楼层
好,谢谢,问题终于解决了,能否留下您的联系方式,QQ,或者邮件之类的,谢谢
回复

使用道具 举报

千问 | 2007-10-20 08:38:44 | 显示全部楼层
dingding!!!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行