SQL Server:Subquery Issue 900
问题描述:
我正在使用Sql Server Management Studio 2016,我有一个返回少于10个结果的查询,问题是我需要通过特定的文本字段来排序结果,但所需的顺序不是按字母顺序排列的。如果可能的结果是abc,cde,ghf等,我想先选择cde并忽略其他,如果ghf不可用,如果非那些则abc。因为这是一个子查询,所以我总是从更高级别的select中获得相同数量的结果,但只需要满足列表中第一个值的那个,而忽略所有其他值。任何想法,将不胜感激。感谢您可以使用SQL Server:Subquery Issue 900
答
的一种方法是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
问题不是特别清楚。你想根据你定义的一组有限的可能值进行排序? – AndySavage
你可以显示你的表结构和一些代码吗? – shoover