----------------------------------------------------------------
-- Author :DBA_HuangZJ(发粪涂墙)
-- Date :2014-05-24 09:27:31
-- Version:
-- Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.1 (X64)
-- Apr 2 2010 15:48:46
-- Copyright (c) Microsoft Corporation
-- Enterprise Edition (64-bit) on Windows NT 6.2 <X64> (Build 9200: ) (Hypervisor)
--
----------------------------------------------------------------
--> 测试数据[TABLE1]
if object_id('[TABLE1]') is not null drop table [TABLE1]
go
create table [TABLE1]([ID1] nvarchar(2),[ID2] nvarchar(2),[IQTY] int)
insert [TABLE1]
select 'A','F',12 union all
select 'A','H',10
--> 测试数据[TABLE2]
if object_id('[TABLE2]') is not null drop table [TABLE2]
go
create table [TABLE2]([ID1] nvarchar(2),[ID2] nvarchar(2),[IQTY] int)
insert [TABLE2]
select 'A','F',5 union all
select 'A','D',2
--------------生成数据--------------------------select * from [TABLE2]
UNION ALL
select * from [TABLE1] a
WHERE NOT EXISTS (SELECT 1 FROM [TABLE2] b WHERE a.id1=b.id1 AND a.id2=b.id2)
----------------结果----------------------------
/*
ID1 ID2 IQTY
---- ---- -----------
A F 5
A D 2
A H 10
*/
-- Author :DBA_HuangZJ(发粪涂墙)
-- Date :2014-05-24 09:27:31
-- Version:
-- Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.1 (X64)
-- Apr 2 2010 15:48:46
-- Copyright (c) Microsoft Corporation
-- Enterprise Edition (64-bit) on Windows NT 6.2 <X64> (Build 9200: ) (Hypervisor)
--
----------------------------------------------------------------
--> 测试数据[TABLE1]
if object_id('[TABLE1]') is not null drop table [TABLE1]
go
create table [TABLE1]([ID1] nvarchar(2),[ID2] nvarchar(2),[IQTY] int)
insert [TABLE1]
select 'A','F',12 union all
select 'A','H',10
--> 测试数据[TABLE2]
if object_id('[TABLE2]') is not null drop table [TABLE2]
go
create table [TABLE2]([ID1] nvarchar(2),[ID2] nvarchar(2),[IQTY] int)
insert [TABLE2]
select 'A','F',5 union all
select 'A','D',2
--------------生成数据--------------------------select * from [TABLE2]
UNION ALL
select * from [TABLE1] a
WHERE NOT EXISTS (SELECT 1 FROM [TABLE2] b WHERE a.id1=b.id1 AND a.id2=b.id2)
----------------结果----------------------------
/*
ID1 ID2 IQTY
---- ---- -----------
A F 5
A D 2
A H 10
*/
/*
TABLE 1:
ID1 ID2 IQTY
A , F , 12
A , H , 10
...
TABLE 2:
ID1 ID2 IQTY
A , F , 5
A , D , 2
*/
create table #a (ID1 char(1),ID2 char(2),IQTY TINYINT)
create table #b (ID1 char(1),ID2 char(2),IQTY TINYINT)
insert into #a (ID1,ID2,IQTY)
VALUES('A','F',12),
('A','H',12)
insert into #B (ID1,ID2,IQTY)
VALUES('A','F',5),
('A','D',2)
--解决方案
;with a as (select * from #a
union all
select * from #b
)
select distinct a.id1,a.id2
,case WHEN B.IQTY IS NULL THEN A.IQTY ELSE B.IQTY END AS IQTY
from a left outer join #b as b on a.id1 = b.id1 and a.id2 = b.id2
--结果展示
/*
id1 id2 IQTY
---- ---- ----
A D 2
A F 5
A H 12(3 行受影响)
*/
SELECT ID1, ID2, IQTY FROM [TABLE2]
UNION ALL
SELECT ID1, ID2, IQTY FROM [TABLE1]
WHERE ID1+ID2 NOT IN (SELECT ID1+ID2 FROM [TABLE1])