使用重复密钥更新的insert into的SQL查询

使用重复密钥更新的insert into的SQL查询,sql,sql-server,Sql,Sql Server,我有两个表debitTable和creditTable debitTable具有以下记录: +----+-------+ | id | debit | +----+-------+ | a | 10000 | | b | 35000 | +----+-------+ 而creditTable有以下记录: +----+--------+ | id | credit | +----+--------+ | b | 5000 | +----+--------+ 如何使用SQL Serve

我有两个表
debitTable
creditTable

debitTable
具有以下记录:

+----+-------+
| id | debit |
+----+-------+
| a  | 10000 |
| b  | 35000 |
+----+-------+
creditTable
有以下记录:

+----+--------+
| id | credit |
+----+--------+
| b  | 5000   |
+----+--------+
如何使用SQL Server查询来生成以下结果:

+----+----------------+--------------+
| id | debit | credit | debit-credit |
+----+----------------+--------------+
| a  | 10000 |   0    |     10000    |
| b  | 35000 |  5000  |     30000    |
+----+-------+--------+--------------+
你可以试试“左加入”

你可以试试“左加入”


您想使用
连接
。但是,重要的是在加入之前进行聚合:

select coalesce(d.id, c.id) as id, coalesce(credit, 0) as credit,
       (coalesce(debit, 0) - coalesce(credit, 0)) as DebitMinusCredit
from (select id, sum(debit) as debit
      from debit
      group by id
     ) d full outer join
     (select id, sum(credit) as credit
      from debit
      group by id
     ) c
     on d.id = c.id;

这将使用
完全外部联接
来确保包括两个表中的所有记录,即使其中一个表中没有id。加入前的聚合是为了避免在两个表中的单个id都有多行时出现笛卡尔积。

要使用
加入
。但是,重要的是在加入之前进行聚合:

select coalesce(d.id, c.id) as id, coalesce(credit, 0) as credit,
       (coalesce(debit, 0) - coalesce(credit, 0)) as DebitMinusCredit
from (select id, sum(debit) as debit
      from debit
      group by id
     ) d full outer join
     (select id, sum(credit) as credit
      from debit
      group by id
     ) c
     on d.id = c.id;
select 
    debit.id, debit.debit, credit.credit, 
    debit.debit - credit.credit as [debit-credit]
from 
    debit 
left join 
    credit on debit.id = credit.id
这将使用
完全外部联接
来确保包括两个表中的所有记录,即使其中一个表中没有id。加入前的聚合是为了避免在两个表中的单个id都有多行时产生笛卡尔积

select 
    debit.id, debit.debit, credit.credit, 
    debit.debit - credit.credit as [debit-credit]
from 
    debit 
left join 
    credit on debit.id = credit.id
但这将只基于借方:这意味着,如果您在贷方中有id,而该id不在借方中,它将不会出现在该结果中

但这将只基于借方:这意味着,如果您在贷方中有id,而该id不在借方中,它将不会出现在该结果中