我的问题与此类似: how to maintain order while doing join in sql
基本上我在存储过程中有一个table参数,它包含特定顺序的一些ID。我想在内连接中使用这些ID,并根据输入table-parameter的顺序返回结果。所以,我必须找到一种方法来构建一个包含排名和ID的新表。
从我在类似帖子中看到的,除非我还从外部非SQL世界(在我的表参数中)提供一些额外的排名列,否则无法在SQL中实现这一点?
这对我来说太陌生了...... 真的是这种情况吗?
更新
(显然,我不能使用ROW_NUMBER()或RANK(),因为那些需要按列排序,而我的表中只有ID)
基本上,我的输入表格为以下形式:
CREATE TYPE [dbo].[IdTable] AS TABLE(
[Id] [int] NOT NULL
)
它作为参数提供给我的SP。
答案 0 :(得分:1)
identity
种子启用列添加到输入表中,列将自动填充插入的物理顺序。答案 1 :(得分:0)
听起来像是一个带有排名功能的子查询:
https://msdn.microsoft.com/en-us/library/ms189798.aspx
如果您使用从中生成的列构建子查询ROW_NUMBER()
以及子查询和加入的别名,您可以按该列对查询结果进行排序。
答案 2 :(得分:0)
我认为您可以在输入表参数的结构中使用新的表变量,并为rank / rownumber(可能是标识列)使用新列。 然后你只需要像
那样填充表变量INSERT INTO @tableVar(...) SELECT (...) FROM @inputTableParameter
您可以使用新表变量和rownumber / rank列完成所有操作。
答案 3 :(得分:0)
我已尝试在列上使用IDENTITY,但似乎我使用的DataTable类不允许插入列数少于表格列数的行(因此我无法省略IDENTITY列插入数据并让它自动递增。)
我所做的是提供C#代码中的排名列值以及我SP中该列的排序。
不是我能想象到的最佳解决方案,但至少它可行。