一条SQL的查寻语句,麻烦下。
时间:2011-12-04
来源:互联网
有四个表:
表1 表2 表3 表4
姓名 数学成绩 姓名 语文成绩 姓名 英语成绩 姓名 历史成绩
张三 90 张三 22 张三 44 张三 88
李四 22 李四 33 李四 55 李四 77
大小 33 大小 33 大小 66 大小 66
大二 22 苏二 22 印大 22
想结果为:
姓名 数学成绩 语文成绩 英语成绩 历史成绩
张三 90 22 44 88
李四 22 33 55 77
大小 33 33 66 66
大二 22 0 0 0
苏二 0 0 22 0
印大 0 0 0 22
如果没有的话就为“0”,比如印大的数学成绩是没有的,那么他就为“0”或空都行。谢谢!
表1 表2 表3 表4
姓名 数学成绩 姓名 语文成绩 姓名 英语成绩 姓名 历史成绩
张三 90 张三 22 张三 44 张三 88
李四 22 李四 33 李四 55 李四 77
大小 33 大小 33 大小 66 大小 66
大二 22 苏二 22 印大 22
想结果为:
姓名 数学成绩 语文成绩 英语成绩 历史成绩
张三 90 22 44 88
李四 22 33 55 77
大小 33 33 66 66
大二 22 0 0 0
苏二 0 0 22 0
印大 0 0 0 22
如果没有的话就为“0”,比如印大的数学成绩是没有的,那么他就为“0”或空都行。谢谢!
作者: sxssg 发布时间: 2011-12-04
SQL code
select a.姓名, 数学成绩=isnull(a.数学成绩,0), 语文成绩=isnull(d.语文成绩,0), 英语成绩=isnull(c.语文成绩,0), 历史成绩=isnull(d.历史成绩,0) from 表1 a full join 表2 b on a.姓名=b.姓名 full join 表3 c on a.姓名=c.姓名 full join 表4 d on a.姓名=d.姓名
作者: maco_wang 发布时间: 2011-12-04
SQL code
select a.姓名, 数学成绩=ISNULL(b.数学成绩,0), 语文成绩=ISNULL(c.语文成绩,0), 英语成绩=ISNULL(d.英语成绩,0), 历史成绩=ISNULL(e.历史成绩,0) from (select 姓名 from t1 union select 姓名 from t2 union select 姓名 t3 union select 姓名 from t4) as a left join t1 as b on a.姓名=b.姓名 left join t2 as c on a.姓名=c.姓名 left join t3 as d on a.姓名=d.姓名 left join t4 as e on a.姓名=e.姓名
作者: roy_88 发布时间: 2011-12-04
#1 有笔误。
SQL code
SQL code
declare @表1 table (姓名 varchar(4),数学成绩 int) insert into @表1 select '张三',90 union all select '李四',22 union all select '大小',33 union all select '大二',22 declare @表2 table (姓名 varchar(4),语文成绩 int) insert into @表2 select '张三',22 union all select '李四',33 union all select '大小',33 union all select '苏二',22 declare @表3 table (姓名 varchar(4),英语成绩 int) insert into @表3 select '张三',44 union all select '李四',55 union all select '大小',66 union all select '印大',22 declare @表4 table (姓名 varchar(4),历史成绩 int) insert into @表4 select '张三',88 union all select '李四',77 union all select '大小',66 select 姓名=coalesce(a.姓名,b.姓名,c.姓名,d.姓名), 数学成绩=isnull(a.数学成绩,0), 语文成绩=isnull(b.语文成绩,0), 英语成绩=isnull(c.英语成绩,0), 历史成绩=isnull(d.历史成绩,0) from @表1 a full join @表2 b on a.姓名=b.姓名 full join @表3 c on a.姓名=c.姓名 full join @表4 d on a.姓名=d.姓名 /* 姓名 数学成绩 语文成绩 英语成绩 历史成绩 ---- ----------- ----------- ----------- ----------- 张三 90 22 44 88 李四 22 33 55 77 大小 33 33 66 66 大二 22 0 0 0 苏二 0 22 0 0 印大 0 0 22 0 */
作者: maco_wang 发布时间: 2011-12-04
SQL code
if object_id('tb1','U') is not null drop table tb1 go create table tb1 ( 姓名 varchar(10), 数学成绩 int ) go insert into tb1 select '张三',90 union all select '李四',22 union all select '大小',33 union all select '大二',22 go if object_id('tb2','U') is not null drop table tb2 go create table tb2 ( 姓名 varchar(10), 语文成绩 int ) go insert into tb2 select '张三',22 union all select '李四',33 union all select '大小',33 union all select '苏二',22 go if object_id('tb3','U') is not null drop table tb3 go create table tb3 ( 姓名 varchar(10), 英语成绩 int ) go insert into tb3 select '张三',44 union all select '李四',55 union all select '大小',66 union all select '印大',22 go if object_id('tb4','U') is not null drop table tb4 go create table tb4 ( 姓名 varchar(10), 历史成绩 int ) go insert into tb4 select '张三',88 union all select '李四',77 union all select '大小',66 go select 姓名, 数学成绩=max(case when 科目='数学成绩' then 成绩 else 0 end), 语文成绩=max(case when 科目='语文成绩' then 成绩 else 0 end), 英语成绩=max(case when 科目='英语成绩' then 成绩 else 0 end), 历史成绩=max(case when 科目='历史成绩' then 成绩 else 0 end) from ( select 姓名,成绩=数学成绩,科目='数学成绩' from tb1 union all select *,'语文成绩' from tb2 union all select *,'英语成绩' from tb3 union all select *,'历史成绩' from tb4 )t group by 姓名 /* 姓名 数学成绩 语文成绩 英语成绩 历史成绩 ---------- ----------- ----------- ----------- ----------- 大二 22 0 0 0 大小 33 33 66 66 李四 22 33 55 77 苏二 0 22 0 0 印大 0 0 22 0 张三 90 22 44 88 (6 行受影响) */
作者: pengxuan 发布时间: 2011-12-04
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28