希望结果与输入的顺序相同

时间:2014-12-29 22:48:03

标签: sql sql-server

我有这样的查询

SELECT NUM,
       col1,
       col2,
       col3,
       col4,
       col5,
       col6
FROM   (SELECT NUM,
               col1,
               col2
        FROM   (SELECT a.mid  AS NUM,
                       a.col1 AS col1,
                       a.col2 AS col2
                FROM   tbl a (nolock)
                WHERE  a.mid IN ( '09-404811,10-433495,10-433575,10-423789' )) AS MainQuery
               UNPIVOT ( LabelValue
                       FOR Label IN (NUM,
                                     col1,
                                     col2 ) ) AS UnpvtQuery) LT
       INNER JOIN #SetItemsTable tt
               ON tt.col7 = LT.col1
WHERE  LT.NUM IN ( '09-404811,10-433495,10-433575,10-423789' )
ORDER  BY Charindex(NUM, '09-404811,10-433495,10-433575,10-423789') 

这只是原始查询的表示。为IN()提供的值列表大约为400 +。

我对此查询的问题是    ORDER BY CHARINDEX(NUM,'09-404811,10-433495,10-433575,10-423789')执行时间约为25秒。否则,查询的其余部分仅需6秒。   我正在使用CHARINDEX()因为我需要的结果与IN()里面的值出现的顺序相同。

如何有效地完成这项工作。

1 个答案:

答案 0 :(得分:1)

我会首先选择内部查询到临时表,然后您可以根据需要查询和排序/分组。我会避免尝试使用Charindex,因为它需要经历所有返回的值。