SQL Server:Subquery Issue 900

问题描述:

我正在使用Sql Server Management Studio 2016,我有一个返回少于10个结果的查询,问题是我需要通过特定的文本字段来排序结果,但所需的顺序不是按字母顺序排列的。如果可能的结果是abc,cde,ghf等,我想先选择cde并忽略其他,如果ghf不可用,如果非那些则abc。因为这是一个子查询,所以我总是从更高级别的select中获得相同数量的结果,但只需要满足列表中第一个值的那个,而忽略所有其他值。任何想法,将不胜感激。感谢您可以使用SQL Server:Subquery Issue 900

+0

问题不是特别清楚。你想根据你定义的一组有限的可能值进行排序? – AndySavage

+0

你可以显示你的表结构和一些代码吗? – shoover

的一种方法是join

select top 1 q.* 
from (<your query here>) q left join 
    (values ('abc', 1), ('def', 2), . . . 
    ) v(val, ordering) 
    on q.col = v.val 
order by v.ordering; 

另一种方法就更简单了。 。 。

select top 1 q.* 
from (<your query here>) q 
order by charindex('[' + col + ']', '[abc],[def],...') 

另一种选择,你可以使用case表达式返回根据您要自定义排序分配给该列中的值:

select * 
from t 
order by 
    case col 
    when 'cde' then 0 
    when 'ghf' then 1 
    when 'abc' then 2 
    else 3 
    end