2015-12-29 60 views
0

舉個例子,如果有:中如何處理重複在SQL的UNION ALL SELECT語句

SELECT '[email protected]' AS Email, 2 AS Somenumber, 3 AS Number 
UNION ALL 
SELECT '[email protected]' AS Email, 2 AS Somenumber, 5 AS Number 
UNION ALL 
SELECT '[email protected]' AS Email, 1 AS Somenumber, 6 AS Number 

代替:

enter image description here

我想:

enter image description here

+1

我不明白這個問題。只是不要在「union all」中包含第一行。 –

+0

假設這是樣本數據,您如何決定要保留哪些「重複」,「number = 3」還是「number = 5」? – HoneyBadger

+0

這一切都取決於電子郵件地址,我想只返回沒有電子郵件重複的行 – Wicky

回答

0

它看起來像你在每個電子郵件後一行金正日。你可以這樣做:

; with all_rows as 
     (
     ... your union query here ... 
     ) 
, with numbered_rows as 
     (
     select row_number() over (partition by email order by somenumber) as rn 
     ,  * 
     from all_rows 
     ) 
select email 
,  somenumber 
,  number 
from numbered_rows 
WHERE rn = 1 
0

通常當我需要解決這樣的問題,我將與以上只是我的腦海Devart解決方案相同的方式 工作,但這裏給出更好的執行計劃的替代解決方案

select Email, max(Somenumber), max(Number) from (
SELECT '[email protected]' AS Email, 2 AS Somenumber, 3 AS Number 
UNION ALL 
SELECT '[email protected]' AS Email, 2 AS Somenumber, 5 AS Number 
UNION ALL 
SELECT '[email protected]' AS Email, 1 AS Somenumber, 6 AS Number 
) A 
group by Email 

enter image description here