簡體   English   中英

聯合三個表,其中並非所有列都存在

[英]Union three tables where not all columns exist

我認為這將是一個相當直接的過程,但我在將三個表聯合/合並在一起時遇到了問題。 每個prvs_cur_前綴大約有 20 個左右的屬性,但我選擇只為問題添加一些屬性。

表 1, #no_change_or_transfer看起來像這樣,大約有 100 萬行:

prvs_loan_num  | prvs_wac  | prvs_tni  | cur_loan_num  | cur_wac  | cur_tni
---------------|-----------|-----------|---------------|----------|---------
 86            | 2.3       | 2000      | 86            |  2.5     |  2000

表 2, #left_in_aug看起來像這樣,大約有 20,000 行:

prvs_loan_num  | prvs_wac  | prvs_tni  
---------------|-----------|-----------
 10            | 3.1       | 1500      

表 3, #joined_in_sept看起來像這樣,大約有 20,000 行:

cur_loan_num   | cur_wac   | cur_tni  
---------------|-----------|-----------
 22            | 3.5       | 1700      

我想要的是桌子看起來像這樣:

prvs_loan_num  | prvs_wac  | prvs_tni  | cur_loan_num  | cur_wac  | cur_tni
---------------|-----------|-----------|---------------|----------|---------
 86            | 2.3       | 2000      | 86            |  2.5     |  2000
 10            | 3.1       | 1500      | NULL          |  NULL    |  NULL
 NULL          | NULL      | NULL      | 22            |  3.5     |  1700        

我嘗試過這樣的full outer join但收到錯誤消息,指出每個表中的列名必須是唯一的:

SELECT              *
INTO                #month_over_month
FROM                #no_change_or_transfer a
FULL OUTER JOIN     #left_in_aug b
    ON              a.prvs_loan_number = b.prvs_loan_number
FULL OUTER JOIN     #joined_in_sept c
    ON              a.cur_loan_number = c.cur_loan_number

我也試過這個並收到一個錯誤,說所有使用 UNION 的查詢在它們的目標列表中必須有相同數量的表達式:

SELECT      x.*
    INTO    #month_over_month
    FROM    (SELECT * FROM #no_change_or_transfer
             UNION
             SELECT * FROM #left_in_aug
             UNION
             SELECT * FROM #joined_in_sept) x

聯合中的所有列在每個查詢中都必須匹配。

明確指定列名並在必要時提供null

請注意,列名僅由第一個查詢確定。

 select prvs_loan_num, prvs_wac, prvs_tni, cur_loan_num, cur_wac, cur_tni
 from #no_change_or_transfer
 union all
 select prvs_loan_num, prvs_wac, prvs_tni, null, null, null
 from #left_in_aug
 union all
 select null, null, null, cur_loan_num, cur_wac, cur_tni 
 from #joined_in_sept

您可以使用UNION ALL聯合表。 例如:

select prvs_loan_num, prvs_wac, prvs_tni, cur_loan_num, cur_wac, cur_tni
from #no_change_or_transfer
union all
select prvs_loan_num, prvs_wac, prvs_tni, null, null, null
from #left_in_aug
union all
select null, null, null, cur_loan_num, cur_wac, cur_tni
from #joined_in_sept

暫無
暫無

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

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