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 只能在这两个语句的基础上加

解决方案 »

  1.   

    select 学号,姓名,学期,语文,    '' as 数学  from table_chinese 
    union all
    select 学号 ,姓名 ,学期 ,'' as 语文,数学 from Table_Match
      

  2.   


    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都是“上”学期了。
      

  3.   

    我试过left join 由于姓名B都是上学期,left join 后会出4行姓名B的数据。
      

  4.   

    没办法 ,换了 sql2005,我的小黑很老了,扛不动2005
    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 行)*/
      

  5.   

    create view v_kc as
    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 学号,姓名,学期
      

  6.   

    insert into Table_Chinese values ('002','B','上','50');
    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.学期
      

  7.   

    其实很简单,但是建议楼主把数据库里的上下学期这个字段改成整数型,或者BIT型 \