处理重复的行:在 SQL 的内部联接中包含 SELECT 语句

Addressing Duplicated Rows: Including a SELECT Statement within an Inner Join In SQL

我正在编写一个 SQL 脚本来生成历史月度数据集。我的问题是我需要在我的数据集中添加一个额外的列,如果我只是使用内部连接语句或左外部连接语句,我的数据集 returns 重复行。

为了解决这个问题,我想我需要在 inner join 中包含一个 SELECT 语句,但是当我尝试这样做时,我的脚本将不会执行。我想知道我是否在 inner join.

中滥用了 SELECT

关于我的代码的一些背景知识,表 a 和 d 是相同的表,但是我需要同时使用它们来计算字段 PrinPmtIntPmt

我的代码:

select

a.acct_id AccountID,
t.act_open_date OpenDate,
a.process_date ProcessDate, 
a.acct_type AccountType, 
d.payment_nxt_due_amt PaymentDue,  
a.cur_bal CurrentBalance,
oza.fee_paid FeesPaid,
d.process_date, 
d.cur_bal, 
a.cur_bal - isnull(d.cur_bal,0) as PrinPmt,
a.int_paid_total - isnull(d.int_paid_total,0) as IntPmt,

from tb_ln_ozs_accts a
inner join tb.offset_month b 
      on a.process_date = b.process_date
inner join tb.offset_month c 
      on b.offset = c.offset+1
left outer join tb_ln_ozs_accts d  
      on c.process_date = d.process_date
      and a.acct_id = d.acct_id
      and a.order_no= d.order_no
left outer join tb_oza_pmt_schd_ard oza 
      on d.process_date=oza.process_date 
      and d.acct_id = oza.acct_id 
      and d.order_no= oza.order_no
      and d.scheduled_payment_date = oza.payment_eff_date
inner join (
select
dzn.acct_nbr_id,
dzn.order_no,
t.act_open_date
from 
tb_dzn_order_scd dzn
GROUP BY dzn.acct_id , dzn.order_nbr
) on a.acct_id = dzn.acct_nbr_id and  a.order_no= DZN.order_no
where 

and a.process_date >= '2015-01-01'


order by a.process_date, a.acct_id, a.order_no

你真的很接近,但还需要多走一步。

在加入的 sub-query 中,您实际上需要命名 sub-query 本身,它会创建一个具有该名称的虚拟 table。然后link那个虚table就正常了。

例如,在下面我将 sub-query 命名为 'dzn_subquery' 并将 dzn 上的连接更改为 dzn_subquery(所有更改都在底线上)。

inner join (
select
dzn.acct_nbr_id,
dzn.order_no,
t.act_open_date
from 
tb_dzn_order_scd dzn
GROUP BY dzn.acct_id , dzn.order_nbr
-- changed following line
) AS dzn_subquery on a.acct_id = dzn_subquery.acct_nbr_id and  a.order_no= dzn_subquery.order_no