簡體   English   中英

外加入或特殊聯盟

[英]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 joinunion 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.

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