当前位置: 代码迷 >> Sql Server >> T1、T2表该怎么合并?
  详细解决方案

T1、T2表该怎么合并?

热度:95   发布时间:2016-04-24 10:45:29.0
T1、T2表该如何合并???
T1、T2客户字段相同,要求两表合并成T3,客户相同的两表直接相接,客户不同有T1部分的,将T1部分的落下,T2对应的字段值都为0,相反T2的也是,合并后不能丢客户,求SQL语句
T1:
客户 应付 余额1
张三 100 50
李四 200 70
王五 180 40

T2:
客户 应收 余额2
张三 50 30
赵六 170 100
周九 300 200

合并后T3:

客户 应付 余额1 应收 余额2
张三 100 50 50 30
李四 200 70 0 0
王五 180 40 0 0
赵六 0 0 170 100
周九 0 0 300 200

------解决方案--------------------
----------------------------------------------------------------
-- Author  :DBA_HuangZJ(发粪涂墙)
-- Date    :2014-05-14 08:05:00
-- 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)
--
----------------------------------------------------------------
--> 测试数据[T1]
if object_id('[T1]') is not null drop table [T1]
go 
create table [T1]([客户] nvarchar(4),[应付] int,[余额1] int)
insert [T1]
select N'张三',100,50 union all
select N'李四',200,70 union all
select N'王五',180,40
--> 测试数据[T2]
if object_id('[T2]') is not null drop table [T2]
go 
create table [T2]([客户] nvarchar(4),[应收] int,[余额2] int)
insert [T2]
select N'张三',50,30 union all
select N'赵六',170,100 union all
select N'周九',300,200
--------------生成数据--------------------------


select ISNULL(a.[客户],b.[客户])[客户],ISNULL(a.[应付],0)[应付]
,ISNULL(a.[余额1],0)[余额1],ISNULL(b.[应收],0)[应收],ISNULL(b.[余额2],0)[余额2]
from [T1] a FULL JOIN [T2] b ON A.[客户]=b.[客户]
----------------结果----------------------------
/* 
客户   应付          余额1         应收          余额2
---- ----------- ----------- ----------- -----------
张三   100         50          50          30
李四   200         70          0           0
王五   180         40          0           0
赵六   0           0           170         100
周九   0           0           300         200
*/
  相关解决方案