はGOLD
,SILVER
,ACTIVE
またはINACTIVE
のいずれかのテーブルがあります。異なる値によるSQL Serverの注文
この順番で並べ替えて、トップXを取得したいと思います。どのようにしてクエリに書き込むことができますか?
あなたが良いとされた場合は現在、私はあなたが、など、その後SILVER
を照会して、再度サイズをチェックし、
はGOLD
,SILVER
,ACTIVE
またはINACTIVE
のいずれかのテーブルがあります。異なる値によるSQL Serverの注文
この順番で並べ替えて、トップXを取得したいと思います。どのようにしてクエリに書き込むことができますか?
あなたが良いとされた場合は現在、私はあなたが、など、その後SILVER
を照会して、再度サイズをチェックし、
SELECT TOP X *
FROM myTable
ORDER BY
CASE
WHEN Status = 'GOLD' THEN 4
WHEN Status = 'SILVER' THEN 3
WHEN Status = 'ACTIVE' THEN 2
WHEN Status = 'INACTIVE' THEN 1
END DESC
をGOLD
するための第1のクエリでリストをいっぱいにして、リストのサイズをチェックしています
statusvalues
id displaytext sortorder
1 GOLD 10
2 SILVER 20
3 ACTIVE 30
4 INACTIVE 40
次に、メインテーブルにステータス値としてIDを格納します。メインテーブルからこのテーブルに結合して、displaytextとsortorderを取得し、適切にソートします。
NB 1ソート順にギャップが残るため、別のものを挿入する必要がある場合は、たとえば、他の値を変更する必要はありません。 NB 2これは、お客様が「GOLD」が「PREMIUM」と表示されるはずであると判断した場合、データ項目の値を1つ変更し、コードは変更されません。あなたに多くの時間を節約するかもしれない...! しかし、これは過度の可能性があります - あなたが評価するまで。
+1。これは、フレキシブルな発注を行うためのより一般的な方法です。 –
'id'カラムを4バイトのintにしないでください。それを1バイトのtinyintにするか、単に' WidgetStatusCode'を呼び出してchar(1)にしてください。 –
私はそれをcharにしません。それを数字にすると、もしあなたが本当に賢いなら、 "if WidgetStatus <3 ..."やビット単位の操作のような便利なことができます。 –
これは誰かを助けるかもしれません。 'StatusTypes'テーブルの外部キーとして列(StatusTypeID)を持つテーブル(MyTable)があるとします。このような動的ソートを行うプロシージャを実装できます。
CREATE PROCEDURE DynamicSort(@SortOrder int)
AS
BEGIN
SELECT * FROM MyTable
ORDER BY
CASE WHEN StatusTypeID = @SortOrder then 1
END
DESC
END
-- exec DynamicSort 7
+1は素晴らしい作品 - 他のオプションが可能なステータス値のための独立したルックアップテーブルを持っており、そのルックアップテーブルに –
@marc_sを注文のシーケンスを定義するには、次のようになります。絶対に。私はほとんどそれを思いついたが、水を泥だらけにしたくなかった。 –
私はこの素早く簡単な解決法が好きです。ありがとうたくさん:) – Jesper