SQL Server 如何联合两个表并覆盖预先存在的行

kgsdhlau  于 2023-02-03  发布在  其他
关注(0)|答案(3)|浏览(137)

我想将两个表合并为一个表,但如果表1中的帐户代码"Acc1"与表2中的帐户代码"Acc1"相同,则我想将表1中的金额作为结果

    • 表一

帐户代码帐户名项目类型说明期间金额**
Bcc1帐户骨AA良好PC2000 2022年11月30日700
Acc1帐户一台AA良好PC2000 2022年12月1日300

    • 表二

帐户代码帐户名项目类型说明期间金额**
Acc1帐户一台AA良好PC2000 2022年12月1日220
Acc2帐户一台AA良好PC2000 2022年12月2日432

    • 结果

帐户代码帐户名项目类型说明期间金额**
Bcc1帐户骨AA良好PC2000 2022年11月30日700
Acc1帐户一台AA良好PC2000 2022年12月1日300
Acc2帐户一台AA良好PC2000 2022年12月2日432
我以为会收到此案例的查询

8yoxcaq7

8yoxcaq71#

一种方法是完全外部连接和取消透视技术,如果存在匹配,则从T1中选择列,否则从T2DB Fiddle)中选择列。

SELECT CA.*
FROM   Table1 t1
       FULL JOIN Table2 t2
              ON t1.AccountCode = t2.AccountCode
       CROSS APPLY (SELECT t1.AccountCode,
                           t1.AccountName /*and other columns*/
                    WHERE  t1.AccountCode IS NOT NULL
                    UNION ALL
                    SELECT t2.AccountCode,
                           t2.AccountName /*and other columns*/
                    WHERE  t1.AccountCode IS NULL) CA
tzdcorbm

tzdcorbm2#

这个问题有点令人困惑,但是,根据你的结果,这个方法不一定行得通:

DROP TABLE IF EXISTS #TempTable1;
DROP TABLE IF EXISTS #TempTable2;

CREATE TABLE #TempTable1
(
    AccountCode VARCHAR(100),
    AccountName VARCHAR(100)
);

CREATE TABLE #TempTable2
(
    AccountCode VARCHAR(100),
    AccountName VARCHAR(100)
);

GO

INSERT INTO #TempTable1(AccountCode, AccountName)
VALUES('Bcc1', 'AccountBone'),
('Acc1', 'AccountOne');

INSERT INTO #TempTable2(AccountCode, AccountName)
VALUES('Acc1', 'AccountOne'),
('Acc2', 'AccountOne');

SELECT *
FROM #TempTable1
UNION
SELECT *
FROM #TempTable2;
o7jaxewo

o7jaxewo3#

您可以从表1和表2中选择所有表1中不存在的内容:

select * 
from Table1
union
select * 
from Table2
where AccountCode not in (
  select AccountCode
  from Table1
)

参见dbfiddle

相关问题