2015-04-23 29 views
2
;WITH CTE AS 
(
Select * From 
     (
     SELECT ROW_NUMBER() OVER(ORDER BY StatusDate) AS SrNo, FirstName 
From Tab1 
    UNION ALL 
    SELECT ROW_NUMBER() OVER(ORDER BY StatusDate) AS SrNo, FirstName 
    From Tab2 
) v 
) 
Select * From CTE 

是否有任何可以在Tab1中生成的Row_Number()後繼續。所以,如果第一個結果在UNION在10000結束了在聯盟第2表應該從10001Row_Number()繼續在聯合查詢中

注意開始:我想Row_Number(),因爲它是Select * From

內因此我不不能改變它到:

;WITH CTE AS 
(
Select *, ROW_NUMBER() OVER(ORDER BY StatusDate) AS SrNo From 
     (
     SELECT FirstName 
From Tab1 
    UNION ALL 
    SELECT FirstName 
    From Tab2 
) v 
) 
Select * From CTE 

任何幫助,非常感謝。

+0

'UNION'包括一個獨特的。 'ROW_NUMBER'防止那個不同。向外移動row_number或使用'UNION ALL' –

+0

您或您現在要刪除重複項嗎? –

+0

@Aツ:正如我所說,我不能在外面移動Row_Number。這是一個錯誤的問題。我修好了。現在是UNION ALL。我不希望Row_Num重複。使用UNION ALL之後就是發生了什麼。 – Jack

回答

3

既然你不分區的數據的最大ROW_NUMBER應等於行數,所以你可以在TAB1 TAB2中只需添加的行數的行號:

;WITH CTE AS 
(
SELECT * FROM 
     (
     SELECT 
      ROW_NUMBER() OVER(ORDER BY StatusDate) AS SrNo, 
      FirstName 
     FROM Tab1 
     UNION ALL 
     SELECT 
      ROW_NUMBER() OVER(ORDER BY StatusDate) + (SELECT COUNT(*) FROM tab1) AS SrNo, 
      FirstName 
     FROM Tab2 
     ) v 
) 
SELECT * FROM CTE 
+0

看起來非常有前途。讓我試試:) – Jack

1

讓我猜測,這是你真正想要的:

select FirstName 
from tab1 
union all 
select FirstName 
from tab2 
where not exists (select 1 form tab1 t1 where t1.firstname = t2.firstname) 

然後,你可以列舉結果:

select FirstName, row_number() over (order by which, StatusDate) as srNo 
from ((select FirstName, StatusDate, 1 as which 
     from tab1 
    ) union all 
     (select FirstName, StatusDate, 2 as which 
     from tab2 
     where not exists (select 1 form tab1 t1 where t1.firstname = t2.firstname) 
    ) 
    ) f 
+1

超級。你是電腦嗎?看起來有點困惑我的想法,但它的作品! – Jack

3

你的要求並不完全清楚,但根據我的理解,這就是我會做的。

;WITH UnionedData AS 
(
SELECT FirstName, StatusDate, 10 AS SortOrder 
FROM Tab1 
UNION 
SELECT FirstName, StatusDate, 20 AS SortOrder 
FROM Tab2 
) 
SELECT FirstName, ROW_NUMBER() OVER(ORDER BY SortOrder, StatusDate) AS SrNo 
FROM UnionedData 
+0

對你來說也不錯。 – Jack