一季度表
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
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
SELECT *
FROM 二月表 AS A
WHERE NOT EXISTS(SELECT * FROM 一季度表
WHERE CITY=A.CITY AND BOOK_ID=A.BOOK_ID);
SELECT CITY,BOOK_ID,BOOKS_FEB
FROM [二月表]
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
*/
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
--创建测试数据
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
*/
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)
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 行受影响)
*/