2017-08-14 3 views
1

これを適切に動作するコードをもう少し...美しくしたいと思います。大きなCASE文を単純化するには?

SET @weightClass = CASE 
    WHEN @totalWeight < 50 THEN 'A' 
    WHEN @totalWeight < 100 THEN 'B' 
    WHEN @totalWeight < 150 THEN 'C' 
    WHEN @totalWeight < 200 THEN 'D' 
    WHEN @totalWeight < 250 THEN 'E' 
    WHEN @totalWeight < 300 THEN 'F' 
    WHEN @totalWeight < 350 THEN 'G' 
    WHEN @totalWeight < 400 THEN 'H' 
    WHEN @totalWeight < 450 THEN 'I' 
    WHEN @totalWeight < 500 THEN 'J' 
    WHEN @totalWeight < 550 THEN 'K' 
    WHEN @totalWeight < 600 THEN 'L' 
    WHEN @totalWeight < 650 THEN 'M' 
    WHEN @totalWeight < 700 THEN 'N' 
    WHEN @totalWeight < 750 THEN 'O' 
    WHEN @totalWeight < 800 THEN 'P' 
    WHEN @totalWeight < 850 THEN 'Q' 
    WHEN @totalWeight < 900 THEN 'R' 
    WHEN @totalWeight < 950 THEN 'S' 
    ELSE 'T' 
END 

私はこれを行うことが可能(かつ実現可能な)だろう文字と50の論理的な増分のASCII値を使用する方法があるかもしれないと考えていますか?どのようにしてクエリが著しく遅くなるのでしょうか?文字を取得する

+0

whileループでCHARのですか?増分はアルファベット順になっているので、それを機能させるにはあまりにも難しいはずがありません。 – imBlue

+0

weightClassテーブルを定義します。排他的なウェイト範囲を持つ可能性があります。 – user6144226

答えて

7

関数は()
AのASCIIコードが可能65

SELECT CASE 
    WHEN @totalWeight >= 950 THEN 'T' 
    ELSE CHAR(@totalWeight/50 + 65) 
END 
+0

どのように私は 'T'でそれをキャップするだろうか? – Danieboy

+1

私はそれが+65であるべきだと思います。私が値49で走るとき、そうでなければ '@'を得る。編集:このように:SELECT CHAR((@ totalWeight/50)+ 65) – Danieboy

+0

@Danieboy - あなたは正しいと思います!これは0(整数除算)に丸められます。私の悪い。それを修正し、 'T'で最大値を尊重するように更新しました – AjahnCharles

関連する問題