2016-12-28 37 views
0

我有一个情况,我想用row_number()是SQL Server在同一个表上的两个相关查询中取回唯一编号。问题是我没有一个列出现在两个查询中,我可以依靠它们是唯一的,尽管两个查询都是使用单列主键(我将在此称为pk)在同一个表上运行,相同的WHERE条款。因此,两个查询的格式都是row_number()和按列排序不在结果中

SELECT row_number() OVER(ORDER BY table1.pk ASC) as my_id, ..... 
    FROM table1, table2 
WHERE table1.pk = table2.fk and .... 

table1.pk只出现在其中一个查询的结果集中。我可以依靠这两个查询以相同的顺序返回行(相对于table1中的行)吗?如果不是,有人可以提出另一种方法吗?这些SELECTINSERT语句的输入,所以对于结果列我没有很大的余地。

回答

0

如果对订单是否相同有任何疑问,我使用一个将row_number()值绑定到pk的中间表。一个简单的例子是:

INSERT INTO #tmpPK 
SELECT table1.pk, 
    row_number() OVER(ORDER BY table1.pk ASC) as my_id 

CREATE UNIQUE INDEX ix1 ON #tmpPK (pk) INCLUDE (my_id) 

然后再加入到这个表,而拆分数据:

SELECT t.my_id, ... 
FROM table1 t1 
INNER JOIN table2 t2 
    ON t1.pk = t2.fk 
... 
INNER JOIN #tmpPK t 
    ON t1.pk = t.pk 

不管你做什么,内心的从table1.pk JOIN到#tmpPK.pk保证my_id的值对于不同的PK是相同的。

也就是说,除非有一行表中缺少行,否则您将分裂到可能会添加到另一个表中的行,我怀疑您会遇到问题。