求SQL语句(存储过程)

Microsoft-笨笨 2015-05-20 01:59:16
继上次发布的帖子(http://bbs.csdn.net/topics/391030331)的延伸,

有用户志愿表,保存的是用户填写的志愿:

(用户志愿表)
ID 批次 志愿代码 学校 用户
1 第一批 A 学校A 小明

2 第一批 B 学校B 小明

3 第二批 A 学校C 小明

4 第一批 A 学校A 小红

5 第一批 A 学校A 小毛

6 第一批 B 学校B 小毛

………………


用户表

ID 用户 分数
1 小明 578

2 小红 595

3 小毛 562

………………

其中用户志愿表的用户字段和用户表的用户字段关联,需要的结果是

获取某用户所有的志愿,且填报相同志愿的总人数,以及最高分和最低分

如小明查看自己填写的所有志愿,则得出如下结果


批次 志愿代码 学校 填报人数 最高分 最低分

第一批 A 学校A 3 595 562

第一批 B 学校B 2 578 562

第二批 A 学校C 1 578 578


现在用户志愿表里多了6个字段(专业1,专业1,专业3,专业4,专业5,专业6)(注:我暂时这样设计的用户志愿表,因为每个学校下面可以填6个专业),那么用户志愿表变成了如下

ID 批次 志愿代码 学校 专业1 专业2 专业3 专业4 专业5 专业6 用户

1 第一批次 A 学校A 1 2 3 4 小明

2 第一批次 B 学校B 1 2 3 4 5 6 小明

3 第一批次 A 学校A 1 3 小红

4 第一批次 A 学校A 2 3 小毛


学生报了某个学校后,可以不填报任何专业,现在除了要统计同一批次,同一学校,同一志愿代码的填报人数,最高分,最低分外 ,还有统计统一专业填报的人数,及最高分,最低分

如,小明查看自己填报的所有志愿,则得出结果:



批次 志愿代码 学校 填报人数 最高分 最低分 展开

第一批 A 学校A 3 595 562


专业一 1 2 595 578

专业二 2 2 578 562

专业三 3 3 595 562

专业四 4 1 578 578
(注:专业5,专业6,小明没填,不用罗列出来)


第一批 B 学校B 2 578 562

第二批 A 学校C 1 578 578



(当然也可以将用户的专业志愿单独放在一张表中,和用户志愿表关联起来。只是最开始就按着上述进行设计和编码的),希望大家帮忙,谢谢
...全文
80 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
还在加载中灬 2015-05-20
  • 打赏
  • 举报
回复
WITH CTE AS(
	SELECT * FROM 用户志愿表
)
,CTE2 AS(
	SELECT 批次,志愿代码,学校,专业1,'专业1'[专业],用户 FROM CTE
	UNION ALL
	SELECT 批次,志愿代码,学校,专业2,'专业2'[专业],用户 FROM CTE
	UNION ALL
	SELECT 批次,志愿代码,学校,专业3,'专业3'[专业],用户 FROM CTE
	UNION ALL
	SELECT 批次,志愿代码,学校,专业4,'专业4'[专业],用户 FROM CTE
	UNION ALL
	SELECT 批次,志愿代码,学校,专业5,'专业5'[专业],用户 FROM CTE
	UNION ALL
	SELECT 批次,志愿代码,学校,专业6,'专业6'[专业],用户 FROM CTE
)
SELECT'' 批次,T1.专业 志愿代码,T1.专业1 学校,MAX(T3.分数)最高分,MIN(T3.分数)最低分,T1.批次 批次OD,T1.志愿代码 志愿代码OD,T1.学校 学校OD,2 OD
FROM CTE2 T1
	JOIN CTE2 T2 ON T1.批次=T2.批次 AND T1.志愿代码=T2.志愿代码 AND T1.学校=T2.学校 AND T1.专业=T2.专业
	JOIN 用户表 T3 ON T2.用户=T3.用户
WHERE T1.用户='小明'AND T1.专业1 IS NOT NULL AND T2.专业1 IS NOT NULL
GROUP BY T1.批次,T1.志愿代码,T1.学校,T1.专业1,T1.专业
UNION ALL
SELECT T1.批次,T1.志愿代码,T1.学校,MAX(T3.分数)最高分,MIN(T3.分数)最低分,T1.批次,T1.志愿代码,T1.学校,1 OD
FROM 用户志愿表 T1
	JOIN 用户志愿表 T2 ON T1.批次=T2.批次 AND T1.志愿代码=T2.志愿代码 AND T1.学校=T2.学校
	JOIN 用户表 T3 ON T2.用户=T3.用户
WHERE T1.用户='小明'
GROUP BY T1.批次,T1.志愿代码,T1.学校
ORDER BY 批次OD,志愿代码OD,学校OD,OD
整合在一起的效果如上,可以根据页面需要分离成两个查询 另外,建议 把 专业分离成一个子表,针对你的查询,还是要列转行不方便

27,580

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧