计划表
CardNo  ItemNo  计划数
X       1        2
X       2        4实际生产表
CardNo  ItemNo  实际数
X       1        2
X       3        1要求报表结果:
CardNo  ItemNo  计划数  实际数
X       1        2         2
X       2        4         0
X       3        0         1请问报表能否用一个语句连接两个表得到?谢谢!

解决方案 »

  1.   

    select  cardno=isnull(a.cardno,b.cardno),
    itemno=isnull(a.itemno,b.itemno),
    计划数=isnull(a.计划数,0),
    实际数=isnull(b.实际数,0)
    from 计划表 a full join 实际生产表 b on a.cardno=b.cardno and a.itemno=b.itemno
      

  2.   

    select A.*,B.计划数,C.计划数 from
    (select CardNo,ItemNo from 计划表 union select CardNo,ItemNo from 实际生产表)A
    left join 计划表 on A.CardNo=B.CardNo left join 实际生产表 C on A.CardNo=c.CardNo
      

  3.   

    create table 计划表(cardno char(5),itemno int,计划数 int)
    create table 实际生产表(cardno char(5),itemno int,实际数 int)
    insert into 计划表 
    select'X',1        ,2
    union select 'X',       2        ,4insert into 实际生产表
    select 'X'    ,   1     ,   2
    union select 'X'    ,   3      ,  1
    /*
    要求报表结果:
    CardNo  ItemNo  计划数  实际数
    X       1        2         2
    X       2        4         0
    X       3        0         1*/select  cardno=isnull(a.cardno,b.cardno),
    itemno=isnull(a.itemno,b.itemno),
    计划数=isnull(a.计划数,0),
    实际数=isnull(b.实际数,0)
    from 计划表 a full join 实际生产表 b on a.cardno=b.cardno and a.itemno=b.itemno
    order by isnull(a.cardno,b.cardno),isnull(a.itemno,b.itemno)
    drop table 计划表,实际生产表
      

  4.   

    看楼上才发现没处理null为0
    select A.*,isnull(B.计划数,0),isnull(C.计划数,0) from
    (select CardNo,ItemNo from 计划表 union select CardNo,ItemNo from 实际生产表)A
    left join 计划表 on A.CardNo=B.CardNo left join 实际生产表 C on A.CardNo=c.CardNo
      

  5.   

    SELECT     isnull(a.CardNo,b.CardNo) as CardNo, ISNULL(a.ItemNo, b.ItemNo) AS ItemNo, ISNULL(a.计划数, 0) AS 计划数, ISNULL(b.实际数, 0) AS 实际数
    FROM         dbo.计划表 AS a FULL OUTER JOIN
                          dbo.实际生产表 AS b ON a.CardNo = b.CardNo AND a.ItemNo = b.ItemNo