[英]Outer Join Or special Union
我在這里要實現一種特殊的聯合,假設R1聯合R2,兩個表R都可以分為2部分,RA部分是要合並的內容,RP部分是一個數字。
因此,我的特殊聯合是R1.A的常規聯合R2.A,此外,如果兩個R1,R2上都存在A,還計算一個新的數字P,該數字為1-(1-R1.P)(1-R2.P)。 或者,如果A不在R2中,則此數字僅為R1.P;如果A不在R1中,則此數字為R2.P。
聽起來似乎很復雜,但請看一下下圖:
我正在使用MS SQL Server 2012,歡迎使用任何方法,非常感謝
您可以通過full outer join
或union all
。 就個人而言,我更喜歡full outer join
:
select coalesce(r1.a, r2.a),
(case when r1.p is null then r2.p
when r2.p is null then r1.p
else 1 - (1-r1.p)*(1-r2.p)
end) as p
from r1 full outer join
r2
on r1.a = r2.a;
我偏愛連接,只是因為我認為它們更可能使用索引進行優化並進行優化。 union all
/ group by
版本的union all
也可能會起作用:
select a,
(case when count(*) = 1 then coalesce(min(r1p), min(r2p))
else 1 - (1 - min(r1p))*(1 - min(r2p))
end) as p
from (select r1.a, r1.p as r1p, null as r2p
union all
select r2.a, null, r2.p
) t
group by a
實際上,既然我把查詢寫出來了,我就知道為什么我喜歡聯接了。 沒有聚合時,算術運算更易於表達。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.