2014-09-18 82 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對結果進行排序。

相關問題