SQL笔试题
来源:互联网 发布:微信java关注推送事件 编辑:程序博客网 时间:2024/05/21 12:10
有点跑题了,不再啰嗦----直接晾出压轴题。
压轴题第一问
1.把表一转换为表二
表一:
表二:
数据库代码如下:
1 DROP table #student
2 CREATE TABLE #student (stdname nvarchar(10),stdsubject nvarchar(10),result int)
3 INSERT INTO #student VALUES ('张三','语文',80)
4 INSERT INTO #student values ('张三','数学',90)
5 INSERT INTO #student VALUES ('张三','物理',85)
6 INSERT INTO #student VALUES ('李四','语文',85)
7 INSERT INTO #student values ('李四','数学',92)
8 INSERT INTO #student VALUES ('李四','物理',82)
9 INSERT INTO #student VALUES ('李四','化学',82)
10 INSERT INTO #student VALUES ('李四','化学',82)
11 SELECT * FROM #student
可能很多老手们,一看到这题目就有了答案。当然,贴出答案来不是我的目的,我要带着SQL新手们重构到答案。用李建忠老师最爱说的话就是------我不建议一上来就套用模式,而应该从重构到模式。
首先大家会想到分两组
1 select stdname,····,from #student group by stdname
然后······中间该写什么呢?
1 case stdsubject when '化学' then Result end
2 case stdsubject when '语文' then Result end
3 case stdsubject when '···' then Result end
4 case stdsubject when '···' then Result end
5 case stdsubject when '···' then Result end
表二里面得0是哪里来的呢?
1 isnull(sum(case stdsubject when '化学' then Result end),0)
2 isnull(sum(case stdsubject when '语文' then Result end),0)
3 isnull(sum(case stdsubject when '···' then Result end),0)
4 isnull(sum(case stdsubject when '···' then Result end),0)
5 isnull(sum(case stdsubject when '···' then Result end),0)
所以得出:
1 select stdname,
2 isnull(sum(case stdsubject when '化学' then Result end),0) [化学],
3 isnull(sum(case stdsubject when '数学' then Result end),0) [数学],
4 isnull(sum(case stdsubject when '物理' then Result end),0) [物理],
5 isnull(sum(case stdsubject when '语文' then Result end),0) [语文]
6 from #student
7 group by stdname
然后得出答案:
1 declare @sql varchar(4000)
2 set @sql = 'select stdname'
3 select @sql = @sql + ',isnull(sum(case stdsubject when '''+stdsubject+''' then Result end),0) ['+stdsubject+']'
4 from (select distinct stdsubject from #student) as a
5 select @sql = @sql+' from #student group by stdname'
6 print @sql
7 exec(@sql)
压轴题第二问:把表二转化为表一
表一:
表二:
数据库代码如下:
1 DROP table #student2
2 CREATE TABLE #student2 (stdname nvarchar(10),化学 int,数学 int,物理 int ,语文 int )
3 INSERT INTO #student2 VALUES ('李四',164,92,82,85)
4 INSERT INTO #student2 VALUES ('张三',0,90,85,80)
5 SELECT * FROM #student2
看到这题,直接想到:
2 union all
3 SELECT'李四'as stdname,stdname='数学', 数学 as result from #student2 where stdname='李四'
4 union all
5 SELECT'李四'as stdname,stdname='物理', 物理 as result from #student2 where stdname='李四'
6 union all
7 SELECT'李四'as stdname,stdname='语文', 语文 as result from #student2 where stdname='李四'
9 SELECT'张三'as stdname,stdname='化学', 化学 as result from #student2 where stdname='张三'
10 union all
11 SELECT'张三'as stdname,stdname='数学', 数学 as result from #student2 where stdname='张三'
12 union all
13 SELECT'张三'as stdname,stdname='物理', 物理 as result from #student2 where stdname='张三'
14 union all
15 SELECT'张三'as stdname,stdname='语文', 语文 as result from #student2 where stdname='张三'
- sql笔试题
- sql 笔试题
- SQL笔试题
- SQL笔试题
- SQL Server 笔试题
- oracle sql笔试题
- 笔试题—sql
- sql笔试题
- SQL笔试题
- SQL笔试题
- 用友 SQL笔试题
- SQL笔试题
- 一道sql笔试题
- sql笔试题(1)
- sql 笔试题
- sql常见笔试题
- 笔试题:SQL
- 刷刷笔试题~~[sql]
- 需要谈谈的系列三 产业分析测试目前地位(一)
- 输入a,b,c三个整数,按由大到小顺序输出。(用3个指针变量指向3个整形变量,然后用swap函数来实现互换3个整型变量的值)
- The Trip. 2007
- 用指针变量指向数组元素。
- 'NSInvalidUnarchiveOperationException' 'Could not instantiate class named 'NSLayoutConstraint'
- SQL笔试题
- Afinal 0.3.2 发布,Android快速开发框架
- 十八条
- SQL笔试题——01
- C#中的interface没那么简单
- Curl小小结
- VS2008自定义快捷键
- Hibernate、Spring、Struts、DWR 配置 复习学习
- 编写函数判断一个年是否是闰年,是闰年返回ture,不是闰年返回false。