row_number()和按行排序不在结果中

时间:2016-12-28 23:58:55

标签: sql-server sql-order-by

我有一个案例,我想使用row_number() SQL Server来获取同一个表中两个相关查询中的唯一数字。问题是我没有一个列出现在两个查询中,我可以依赖这些列是唯一的,尽管两个查询都使用单列主键在同一个表上运行(我称之为pk这里)和相同的WHERE条款。所以这两个查询都是

形式
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语句的输入,因此我对结果列没有太大的余地。

1 个答案:

答案 0 :(得分: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到#tmpPK.pk的INNER JOIN确保my_id值对于不同的PK是相同的。

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