2014-09-18 41 views
1

在下面的查询中,我该如何获得与输入参数相同顺序的结果。以“SAME ORDER”的形式返回结果作为输入参数

DECLARE @sql varchar(max) 
SET @sql = 'SELECT a.num AS Num, a.photo as Photo , row_number() over (order by (select 0)) rn 
      FROM tbl a (nolock) WHERE a.num IN (' + @NumList + ') ' 

我传递到@NumList PARAM以下(作为例子):

1-235,1-892,2-847,1-479,3-890,1-239,2-892 

这工作得很好,但是我所需要的结果在“相同的顺序”返回作为输入参数。

我创建了一个SQL Fiddle

回答

2

如果@NumList包含唯一值,你可以使用CharIndex发现帕拉姆EX中的位置:

order by charindex(a.num, @NumList) 
2
  1. 创建本地临时表#numbers。确保它具有自动增量标识列。

  2. 以正确的顺序将@NumList中的数字插入#numbers

    • 在逗号处分割@NumList并将各个值变为行。见例如想法如何做到这一点的this question
    • 或者,将@NumListVARCHAR-type变量转换为表变量。 (这样,你甚至能够代替#numbers直接使用它,即。)
       
  3. 修改查询以便从tbl a行连接到#numbers。此外,添加一个ORDER BY子句,该子句将自动递增标识列#numbers对结果进行排序。

相关问题