使用重复密钥更新的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不在借方中,它将不会出现在该结果中