根据输入参数排序SQL结果

时间:2009-03-23 17:33:42

标签: sql-server tsql

结合fn_split函数,我将根据逗号分隔值从表中返回结果列表。

存储过程T-SQL如下:

SELECT ProductCode, ProductDesc, ImageAsset, PriceEuros, PriceGBP, PriceDollars,  
replace([FileName],' ','\_') as [filename],  
ID as FileID, weight  
from Products  
LEFT OUTER JOIN Assets on Assets.ID = Products.ImageAsset  
where ProductCode COLLATE DATABASE_DEFAULT IN  
(select [value] from fn\_split(@txt,','))  
and showOnWeb = 1

我传入以下的@txt参数(例如):

  

ABC001,ABC009,ABC098,ABC877,ABC723

这一切都运行正常,但结果不会以任何特定顺序返回 - 我需要以“相同顺序”作为输入参数返回的产品。

不幸的是,这是一个带有内置架构的实时网站,因此我无法对其进行任何更改(但我希望可以) - 否则我会让它变得更加明智。

2 个答案:

答案 0 :(得分:5)

如果在@txt参数上传递的所有引用都是唯一的,您可以使用CharIndex来查找它们在param中的位置,例如。

order by charindex(ProductCode, @txt)

答案 1 :(得分:1)

在存储过程中,我将创建一个具有数字键的表,该数字键是临时表的PK并设置为自动递增。然后,我会将fn_split的结果插入到该表中,这样您就可以在列表中按顺序排列参数(自动增量将处理这些参数)。

然后,将结果集连接到此临时表,按数字键排序。

如果参数列表中的条目不是唯一的,那么在将记录插入临时表后,我会删除任何重复项,除了id是该特定参数的最小值的记录。