一季度表 
CITY  BOOK_ID  BOOKS_JAN  BOOKS_FEB  BOOKS_MAR
上海      001        100                NULL                NULL
上海      002         50                NULL                NULL
上海      003         60                NULL                NULL
北京      001         80                NULL                NULL
广州      001         50                NULL                NULL二月表
CITY  BOOK_ID  BOOKS_FEB
上海      001        100                        
上海      002        100       
上海      003        100       
北京      001        100       
广州      001        100       
广州      002        100       
----------------------------------- 
如下SQL语句如何书写?
将一季度表中没有的[ID和城市]添加到一季度表中,如二月表中的: 广州      002        100 
答:这个怎么写??结果如下: 
一季度表 
CITY  BOOK_ID  BOOKS_JAN  BOOKS_FEB  BOOKS_MAR
上海      001        100                  100                  NULL
上海      002         50                  100                  NULL
上海      003         60                  100                  NULL
北京      001         80                  100                  NULL
广州      001         50                  100                  NULL
广州      002         NULL                100                  NULL

解决方案 »

  1.   

    INSERT INTO 一季度表(CITY,BOOK_ID,BOOKS_FEB)
        SELECT *
        FROM 二月表 AS A
        WHERE NOT EXISTS(SELECT * FROM 一季度表
                         WHERE CITY=A.CITY AND BOOK_ID=A.BOOK_ID);
      

  2.   

    INSERT [一季度表](CITY,BOOK_ID,BOOKS_FEB)
    SELECT CITY,BOOK_ID,BOOKS_FEB
    FROM [二月表]
      

  3.   

    declare @A table(CITY varchar(10),BOOK_ID varchar(10),BOOKS_JAN int,BOOKS_FEB int,BOOKS_MAR int)
    insert into @A select '上海','001',100,NULL,NULL 
    insert into @A select '上海','002', 50,NULL,NULL 
    insert into @A select '上海','003', 60,NULL,NULL 
    insert into @A select '北京','001', 80,NULL,NULL 
    insert into @A select '广州','001', 50,NULL,NULL declare @B table(CITY varchar(10),BOOK_ID varchar(20),BOOKS_FEB int)
    insert into @B select '上海','001',100
    insert into @B select '上海','002',100
    insert into @B select '上海','003',100
    insert into @B select '北京','001',100
    insert into @B select '广州','001',100
    insert into @B select '广州','002',100
    update a 
    set
        a.BOOKS_FEB=b.BOOKS_FEB
    from 
        @A a,@B b
    where
        a.CITY=b.CITY and a.BOOK_ID=b.BOOK_IDinsert into @A(CITY,BOOK_ID,BOOKS_FEB)
    select 
        CITY,BOOK_ID,BOOKS_FEB 
    from 
        @B b 
    where 
        not exists(select 1 from @A where CITY=b.CITY and BOOK_ID=b.BOOK_ID)
    select * from @A
    /*
    CITY       BOOK_ID    BOOKS_JAN   BOOKS_FEB   BOOKS_MAR   
    ---------- ---------- ----------- ----------- ----------- 
    上海         001        100         100         NULL
    上海         002        50          100         NULL
    上海         003        60          100         NULL
    北京         001        80          100         NULL
    广州         001        50          100         NULL
    广州         002        NULL        100         NULL
    */
      

  4.   


    INSERT [一季度表](CITY,BOOK_ID,BOOKS_FEB)
    SELECT CITY,BOOK_ID,BOOKS_FEB
    FROM [一季度表] AS A RIGHT JOIN [二月表] AS B
      ON A.CITY=B.CITY AND A.BOOK_ID=B.BOOK_ID
    WHERE A.CITY IS NULL
      

  5.   


    --创建测试数据
    declare @A table(CITY varchar(10),BOOK_ID varchar(10),BOOKS_JAN int,BOOKS_FEB int,BOOKS_MAR int)
    insert into @A select '上海','001',100,NULL,NULL 
    insert into @A select '上海','002', 50,NULL,NULL 
    insert into @A select '上海','003', 60,NULL,NULL 
    insert into @A select '北京','001', 80,NULL,NULL 
    insert into @A select '广州','001', 50,NULL,NULL 
    declare @B table(CITY varchar(10),BOOK_ID varchar(20),BOOKS_FEB int)
    insert into @B select '上海','001',100
    insert into @B select '上海','002',100
    insert into @B select '上海','003',100
    insert into @B select '北京','001',100
    insert into @B select '广州','001',100
    insert into @B select '广州','002',100--第一步,先更新在一季度表中已经存在对应CITY和BOOK_ID的记录,将二月份的数据更新到对应字段
    update a 
    set
        a.BOOKS_FEB=b.BOOKS_FEB
    from 
        @A a,@B b
    where
        a.CITY=b.CITY and a.BOOK_ID=b.BOOK_ID--第二步,将二月份表中对应CITY和BOOK_ID对应不存在于一季度表的记录增加到一季度表中
    insert into @A(CITY,BOOK_ID,BOOKS_FEB)
    select 
        CITY,BOOK_ID,BOOKS_FEB 
    from 
        @B b 
    where 
        not exists(select 1 from @A where CITY=b.CITY and BOOK_ID=b.BOOK_ID)--查看结果
    select * from @A
    /*
    CITY       BOOK_ID    BOOKS_JAN   BOOKS_FEB   BOOKS_MAR   
    ---------- ---------- ----------- ----------- ----------- 
    上海         001        100         100         NULL
    上海         002        50          100         NULL
    上海         003        60          100         NULL
    北京         001        80          100         NULL
    广州         001        50          100         NULL
    广州         002        NULL        100         NULL
    */
      

  6.   

    --先更新季度表里有的数据
     UPDATE  一季度表  SET BOOKS_FEB = L.BOOKS_FEB 
     FROM 一季度表 T, 二月表  L
     WHERE T.CITY = L.CITY AND T.BOOK_ID = L.BOOK_ID
    --插入没有的
     INSERT  一季度表(CITY,BOOKS_ID,BOOKS_FEB)
     SELECT L.CITY,L.BOOKS_ID,L.BOOKS_FEB 
     FROM 二月表  L
     WHERE not exists(SELECT 1 FROM 一季度表 WHERE CITY = L.CITY AND BOOKS_ID  = L.BOOKS_ID)
      

  7.   

    declare @TB1 table(CITY varchar(10), BOOK_ID varchar(10), BOOKS_JAN int, BOOKS_FEB int, BOOKS_MAR  varchar(10))insert @tb1 values('上海','001','100',NULL,NULL)
    insert @tb1 values('上海','002','50',NULL,NULL)
    insert @tb1 values('上海','003','60',NULL,NULL)
    insert @tb1 values('北京','001','80',NULL,NULL)
    insert @tb1 values('广州','001','50',NULL,NULL)declare @TB2 table(CITY varchar(10), BOOK_ID varchar(10), BOOKS_FEB int)
    insert @tb2 values('上海','001','100')
    insert @tb2 values('上海','002','100')
    insert @tb2 values('上海','003','100')
    insert @tb2 values('北京','001','100')
    insert @tb2 values('广州','001','100')
    insert @tb2 values('广州','002','100')insert @tb1
    select CITY,BOOK_ID,null,BooKS_FEB,NULL from @TB2 t where not exists(select 1 from @tb1 where CITY=t.CITY and BOOK_ID=t.BOOK_ID)update @tb1 set BOOKS_FEB=b.BOOKS_FEB from @tb1 a join @tb2 b on a.CITY=b.CITY and a.BOOK_ID=b.BOOK_IDselect * from @tb1/*
    CITY       BOOK_ID    BOOKS_JAN   BOOKS_FEB   BOOKS_MAR
    ---------- ---------- ----------- ----------- ----------
    上海         001        100         100         NULL
    上海         002        50          100         NULL
    上海         003        60          100         NULL
    北京         001        80          100         NULL
    广州         001        50          100         NULL
    广州         002        NULL        100         NULL(6 行受影响)
    */