+ -
当前位置:首页 → 问答吧 → 一条SQL的查寻语句,麻烦下。

一条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”或空都行。谢谢!

作者: 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

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

热门下载

更多