Create table Table_Chinese
{
学号 CHAR(36) NOT NULL,
姓名 CHAR(36) NOT NULL,
学期 CHAR(36) NOT NULL,
语文 CHAR(36) NOT NULL
}
insert into Table_Chinese values ('001','A','上','60');
insert into Table_Chinese values ('001','A','下','80');
insert into Table_Chinese values ('002','B','上','70');
insert into Table_Chinese values ('002','B','上','50');
insert into Table_Chinese values ('003','C','上','20');Create table Table_Match
{
学号 CHAR(36) NOT NULL,
姓名 CHAR(36) NOT NULL,
学期 CHAR(36) NOT NULL,
数学 CHAR(36) NOT NULL
}
insert into Table_Match values ('001','A','上','62');
insert into Table_Match values ('001','A','下','82');
insert into Table_Match values ('002','B','上','72');
insert into Table_Match values ('002','B','上','52');
语句A:Select 学号,姓名,学期,语文 from Table_Chinese
学号 姓名 学期 语文
-------------------------------------
查询结果省略语句B:Select 学号,姓名,学期,数学 from Table_Match
学号 姓名 学期 数学
-------------------------------------
查询结果省略怎么查出这样的结果
学号 姓名 学期 语文 数学
-------------------------------------
001 A 上 60 62
001 A 下 80 82
002 B 上 70 72
002 B 上 50 52
003 C 上 20 要求保留语句A和B 只能在这两个语句的基础上加
{
学号 CHAR(36) NOT NULL,
姓名 CHAR(36) NOT NULL,
学期 CHAR(36) NOT NULL,
语文 CHAR(36) NOT NULL
}
insert into Table_Chinese values ('001','A','上','60');
insert into Table_Chinese values ('001','A','下','80');
insert into Table_Chinese values ('002','B','上','70');
insert into Table_Chinese values ('002','B','上','50');
insert into Table_Chinese values ('003','C','上','20');Create table Table_Match
{
学号 CHAR(36) NOT NULL,
姓名 CHAR(36) NOT NULL,
学期 CHAR(36) NOT NULL,
数学 CHAR(36) NOT NULL
}
insert into Table_Match values ('001','A','上','62');
insert into Table_Match values ('001','A','下','82');
insert into Table_Match values ('002','B','上','72');
insert into Table_Match values ('002','B','上','52');
语句A:Select 学号,姓名,学期,语文 from Table_Chinese
学号 姓名 学期 语文
-------------------------------------
查询结果省略语句B:Select 学号,姓名,学期,数学 from Table_Match
学号 姓名 学期 数学
-------------------------------------
查询结果省略怎么查出这样的结果
学号 姓名 学期 语文 数学
-------------------------------------
001 A 上 60 62
001 A 下 80 82
002 B 上 70 72
002 B 上 50 52
003 C 上 20 要求保留语句A和B 只能在这两个语句的基础上加
union all
select 学号 ,姓名 ,学期 ,'' as 语文,数学 from Table_Match
if object_id('Table_Chinese') is not null drop table Table_Chinese
if object_id('Table_Match') is not null drop table Table_MatchCreate table Table_Chinese
(
学号 CHAR(36) NOT NULL,
姓名 CHAR(36) NOT NULL,
学期 CHAR(36) NOT NULL,
语文 CHAR(36) NOT NULL
)
insert into Table_Chinese values ('001','A','上','60');
insert into Table_Chinese values ('001','A','下','80');
insert into Table_Chinese values ('002','B','上','70');
insert into Table_Chinese values ('002','B','下','50');
insert into Table_Chinese values ('003','C','上','20');Create table Table_Match
(
学号 CHAR(36) NOT NULL,
姓名 CHAR(36) NOT NULL,
学期 CHAR(36) NOT NULL,
数学 CHAR(36) NOT NULL
)
insert into Table_Match values ('001','A','上','62');
insert into Table_Match values ('001','A','下','82');
insert into Table_Match values ('002','B','上','72');
insert into Table_Match values ('002','B','下','52');
select
学号,
姓名,
学期,
max(case 类别 when '语文' then 分数 else 0 end) as 语文,
max(case 类别 when '数学' then 分数 else 0 end) as 数学
from
( select 学号,姓名,学期,语文 as 分数,'语文' as 类别 from Table_Chinese
union
select 学号,姓名,学期,数学,'数学' as 类别 from Table_Match) a
group by 学号,姓名,学期
/*
学号 姓名 学期 语文 数学
------------------------------------ ------------------------------------ ------------------------------------ ----------- -----------
001 A 上 60 62
001 A 下 80 82
002 B 上 70 72
002 B 下 50 52
003 C 上 20 0(5 row(s) affected)*/-- 源数据有点问题,B都是“上”学期了。
select isnull(语句A.学号,语句B.学号) 学号,
isnull(语句A.姓名,语句B.姓名) 姓名,
isnull(语句A.学期,语句B.学期) 学期,
语句A.语文,
语句B.数学
from
(
select *,row_number() over(order by 学号,学期) rn from (Select 学号,姓名,学期,语文 from Table_Chinese)t1
) 语句A full join
(
select *,row_number() over(order by 学号,学期) rn from (Select 学号,姓名,学期,数学 from Table_Match )t2
) 语句B on 语句A.学号=语句B.学号 and 语句A.rn=语句B.rn/*学号 姓名 学期 语文 数学
------------------------------------ ------------------------------------ ------------------------------------ ------------------------------------ ------------------------------------
001 A 上 60 62
001 A 下 80 82
002 B 上 70 72
002 B 上 50 52
003 C 上 20 NULL(所影响的行数为 5 行)*/
Select 学号,姓名,学期,语文 as 成绩,课程='语文' as from Table_Chinese
union all
Select 学号,姓名,学期,数学 as 成绩,课程='数学' from Table_Matchselect 学号,姓名,学期,max(case when 课程='语文' then 成绩 end) 语文,
max(case when 课程='数学' then 成绩 end) 数学
from v_kc
group by 学号,姓名,学期
insert into Table_Chinese values ('003','C','上','20');
insert into Table_Match values ('002','B','上','72');
insert into Table_Match values ('002','B','上','52');上面二个都是“上”,是否LZ弄错了?方法如下,应该是LZ想要的结果,如果把其中的一个上改成下就OK了。SELECT ISNULL(A.学号,B.学号) as 学号,
ISNULL(A.姓名,B.姓名) as 姓名,
ISNULL(A.学期,B.学期) as 学期,
A.语文,
B.数学
FROM Table_Chinese A
FULL JOIN
Table_Match B
ON A.学号 = B.学号
AND A.学期 = B.学期