簡體   English   中英

左連接與右表的前1個值

[英]Left join with right table top 1 values

我正在將一個約有4MM行的帳戶主表與一個事務表連接起來。 我的問題是,當我對交易表中的帳號進行左連接=從帳戶主表中的帳號進行連接時,我發現我們的數據中存在異常。 我可以在帳戶管理員中為同一帳號輸入3個不同的條目。 這些與帳戶的特征有關。 異常之處在於地址信息可能相同,但在某些情況下,我看到城市的拼寫有所不同。 當我加入兩個表時,我只想要帳戶主帳戶中帳號的第一個實例。 我已經看到了一些關於使用row_number()的帖子,但是我在這里無法正確使用它。 這就是我使用的,但是每個帳號都有3條記錄。

     select am.[Customer_Name], am.[svc_city], sr.measure
from [dbo].[PP_SUMMARY_RESIDENTIAL] sr
left join [CIS].[dbo].[Account_Master] am on
(case when (left(sr.fred_account_number,2) = '00') then (right(sr.fred_account_number,len(sr.fred_account_number - 2)))
     when (left(sr.fred_account_number,1) = '0') then (right(sr.fred_account_number,len(sr.fred_account_number - 1)))
     else sr.fred_account_number
     end)
 = (select am.accountnumber, row_number() over (order by am.accountnumber) as row) where row = 1
 and sr.fred_account_number = '123456789' 

首先,如果同一帳戶有多個記錄,則需要翻新數據庫架構和/或使用該數據庫的應用程序。

無論如何,僅選擇幾個“類似”記錄中的一個,就可以按照以下步驟做一些事情(從查詢中簡化)

with
acc_with_ord as ( 
    select
        col1, col2,..., 
        row_number() over (partition by <uniquely identifying columns> order by <some columns>) as ord
    from
        AccountMaster
),
unq_acc as (
    select * from acc_with_ord where ord = 1

)
select <something>
from
    pp_summary_residential
    left join unq_acc on
        <join conditions>

第一部分為描述同一帳戶的記錄分配代理訂單ID(因為我們按一些唯一標識該帳戶的字段進行了分區),第二部分為每個帳戶僅選擇一條記錄,第三部分是使用唯一帳戶的最終選擇加入中的帳戶記錄。

我建議使用outer apply

select am.[Customer_Name], am.[svc_city], sr.measure
from [dbo].[PP_SUMMARY_RESIDENTIAL] sr outer apply
     (select top 1 am.*
      from [CIS].[dbo].[Account_Master] am 
      where (case when (left(sr.fred_account_number, 2) = '00') then (right(sr.fred_account_number,len(sr.fred_account_number - 2)))
                  when (left(sr.fred_account_number,1) = '0') then (right(sr.fred_account_number, len(sr.fred_account_number - 1)))
                  else sr.fred_account_number
             end)
      order by am.account_number
     ) am;

這將從am選擇一行,其中一行取決於order byorder by

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM