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



我有一个这样的查询

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() 中的值出现的顺序相同的结果。

我怎样才能有效地做到这一点。

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

最新更新