2015-04-23 51 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