2009-07-17 17 views
2

この質問は、私のthis other questionに基づいており、すべて同じ基本情報を使用しています。そのリンクは私のテーブルのレイアウトと単純な結合の基本的な要点を示しています。条件に基づいて結果をソートするSQLクエリを作成する方法はありますか

私は表1からすべてのレコードを選択することになる別のクエリを書くのが好き、と単純に価値がリンク閾値未満であるか否かによってそれらをソートします。

もう一度、私はこれで刺す意志がある人に感謝します。データベースはこれまで私の強みではありませんでした。

答えて

7
SELECT t1.LogEntryID, t1.Value, t1.ThresholdID, 
    case when t1.Value < t2.threshold then 1 else 0 end as Rank 
FROM Table1 t1 
INNER JOIN Table2 t2 ON t1.ThresholdID = t2.ThresholdID 
ORDER By Rank 

あなたは逆順にしたい場合は、ORDER By RankDESCを追加することができます。

+0

手作業で必要な残りのフィールドを追加する必要がありますが、とにかくそれを行う必要があります。 – Dave

+0

私はこのコメントを理解していない、クエリは、要件であるTable1からのすべてのレコードを表示しています。 – RedFilter

+0

私は、これらのテーブルには私が示しているよりもはるかに多くのフィールドがあることを述べました。私はDaveがそれを言及していると信じています。 – Giffyguy

4

OrbManの回答に似ていますが、CASEがORDER BYで明示的であることが望ましいので、列で注文を表示する必要はありません。

SELECT 
    t1.LogEntryID 
,t1.Value 
,t1.ThresholdID 
FROM 
    Table1 t1 
    JOIN Table2 t2 ON t2.ThresholdID = t1.ThresholdID 
ORDER BY 
    CASE WHEN t1.Value < t2.threshold 
     THEN 1 
     ELSE 0 
    END ASC 
+0

OrbManのソリューションでは、各行の状態を素早く確認することができます。ただし、完全な結果セットが必要な場合は、必要な情報になる可能性があります。 – Dave

+0

これは私にとってはよりきれいに見えます... JOINタイプを除いて、実行計画の大きな違いは何か分かりません。私はTable2の結果についてはあまり気にしません。私はちょうどそれが与えられたしきい値を渡すかどうかによって順序付けられたTable1のすべての行をしたい。 – Giffyguy

+0

私は、Table2のレコードを表示せずに、t1.Value RedFilter

0

ちょっと考えましたが、戻り値の列の1つに 'threshold-value'を使用できませんでしたか?

これを実行した場合(および列が数値だった場合)、値がしきい値にどれくらい近づいているか(遠くに)表示されます。

何か肯定または0がしきい値を下回ると、何も否定的ではありません。

関連する問題