【发布时间】:2015-06-10 10:11:47
【问题描述】:
我的问题与此类似: how to maintain order while doing join in sql
基本上,我在存储过程中有一个表参数,其中包含特定顺序的一些 ID。我想在内部联接中使用这些 ID,并根据输入表参数的顺序返回结果。因此,我必须找到一种方法来构建一个包含排名和 ID 的新表。
从我在类似帖子上看到的情况来看,没有办法在 SQL 中实现这一点,除非我还从外部非 SQL 世界(在我的表参数内)提供一些额外的排名列?
这对我来说似乎很陌生...... 真的是这样吗?
更新:
(显然,我不能使用 ROW_NUMBER() 或 RANK(),因为它们需要按列排序,而我的表中只有 ID)
基本上,我的输入表是这样的形式:
CREATE TYPE [dbo].[IdTable] AS TABLE(
[Id] [int] NOT NULL
)
它作为参数提供给我的 SP。
【问题讨论】:
-
你有表结构、数据和你想要的输出的例子吗?
-
能否修改存储过程为订单输出一列?如果存储过程没有以确定的方式对数据进行排序,那么尝试强制查询结果以相同的顺序排列就没有什么意义了!
-
@EdB 不,该表来自外部世界,而不是来自 SQL。这是我唯一可以创建订单列的地方,但我想避免它。也许,您在下面的答案(使表类型包含 IDENTITY 列)会有所帮助(我之前没有在表类型中尝试过)。至于SP,我打算按列排序(创建的顺序/排名列),只是我还没有这个列。
-
在下面查看我对我的回答的评论;您可以欺骗 SQL Server 对无序结果使用排名函数。你是否应该是另一回事......
标签: sql sql-server sql-order-by