SQL Server:子查询问题900

SQL Server:子查询问题900,sql,subquery,sql-server-2016,Sql,Subquery,Sql Server 2016,我使用的是Sql Server Management Studio 2016,我有一个返回少于10个结果的查询,问题是我需要按特定文本字段对结果排序,但所需的顺序不是字母顺序。如果可能的结果是abc、cde、ghf等,我想先选择cde,忽略其他结果,如果没有,则选择ghf,如果没有,则选择abc。因为这是一个子查询,所以我总是从较高级别的select中获得相同数量的结果,但只需要满足列表中第一个值的结果,而忽略所有其他结果。任何想法都将不胜感激。谢谢您可以使用的一种方法是加入: select t

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

您可以使用的一种方法是加入:

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;
选择前1个问题*
from()q左连接
(值('abc',1),('def',2)。
)v(val,订购)
关于q.col=v.val
通过v.订购;
另一种方法更简单

select top 1 q.*
from (<your query here>) q
order by charindex('[' + col + ']', '[abc],[def],...')
选择前1个问题*
from()q
按charindex(“[”+列+“]”、“[abc]、[def]、…”排序)

另一个选项是,您可以使用
大小写
表达式根据要分配自定义排序的列返回值:

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

这个问题不是特别清楚。您想根据您定义的一组有限的可能值进行排序吗?能否显示您的表结构和一些代码?