2017-02-28 13 views
0

SQL Server Management Studio 2016を使用していますが、結果が10件未満のクエリがあります。問題は特定のテキストフィールドで結果を並べ替える必要がありますが、必要な順序はアルファベットではありません。可能な結果がabc、cde、ghfなどであった場合は、最初にcdeを選択し、他のものを無視したい場合はghfを使用できません。これはサブクエリなので、常に上位レベルの選択肢から同じ数の結果が得られますが、リスト内の最初の値を満たすものだけをすべて無視します。任意のアイデアをいただければ幸いです。おかげSQL Server:サブクエリーの問題900

+0

質問は特に明確ではありません。あなたが定義する可能な値の有限集合に基づいて注文したいですか? – AndySavage

+0

テーブル構造とコードを表示できますか? – shoover

答えて

1

は、あなたが使用できる一つの方法は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],...') 
0

別のオプション、あなたはあなたにカスタムの並べ替えを割り当てる列に基づいて値を返すようにcase表現を使用することができます。

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