我有一个案例,我想使用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中的行)吗?如果没有,有人可以提出另一种方法吗?这些SELECT
是INSERT
语句的输入,因此我对结果列没有太大的余地。
答案 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是相同的。
那就是说,除非一个表中缺少行,否则可能会将其添加到您要分割的另一个表中,我怀疑您会遇到问题。