
SQL SERVER2005を使用しています。
テーブルAがあり、Aが持つフィールド「suuchi」には数値が入っているとします。
suuchiフィールドの値を計算して、その結果が0以上なら計算結果を。負の数なら0を出力するSQL文を書きたいのです。
CASE WHEN を使用して以下のSQLを書きました。
SELECT CASE WHEN ( suuchi*2 + 1 ) < 0 THEN 0 END FROM テーブルA;
しかし、結果は計算結果が負の数の場合は「0」になりますが、0以上の場合が表示されませんでした。
理由は、CASE WHEN でELSEを省略した場合、結果がNULLになるためと思われます。
以下のSQLでは期待とおりの結果が得られます。
SELECT CASE WHEN ( suuchi*2 + 1 ) < 0 THEN 0 ELSE ( suuchi*2 + 1 ) END FROM テーブル;
しかし、同じ計算式を2回書くのは今一正しくないように思えます。
CASE WHEN で計算結果を判断した場合、ELSEでは計算済みの結果を取ることはできないのでしょうか?
上は例として書いたので簡単な計算式ですが、実際私が業務で使用している計算式はかなり長いため
できれば式を2回書くことを避けたいのです(SQL文が長くなるため)。
計算結果に一時的に別名をつけようとして、以下のようなSQL文を書いたのですが「AS 付近にエラーがあります」といわれます。
SELECT CASE WHEN ( suuchi*2 + 1 ) AS TMPFIELD < 0 THEN 0 ELSE TMPFIELD END FROM テーブル;
質問は2点です。
1) 計算式の結果をCASE WHEN で判断した場合、ELSEの時は計算結果を取得したい場合は、再度同じ計算式を書く必要がありますか?
2) 上の答えが「必要ない」場合、上記条件を満たすSQLの書き方をご教示いただけませんでしょうか?
なお、質問文の文章、SQLServerの環境の記述不足、SQL文等で意味不明な箇所がありましたらご指摘ください。
以上です。よろしくお願いします。
No.1ベストアンサー
- 回答日時:
case文を使う場合は、
case when 式1 then 0 else 式1 end
のように、同じ式を書く必要があります。
計算結果がnullになるような場合なら、
coalesce(式1,0)
といった関数を使う方法もありますが、今回は該当しませんね。
式に別名を付けた場合、そのクエリ内でなく、その外側のクエリでなら、別名で操作できます。
select
EX1
from (select *,suuchi*2+1 as EX1 from tbl1) as x
chukenkenkou様、丁寧なご回答ありがとうございます。
前回(SQLServer2005で文字列の時刻の合計を出す方法)に引き続き、今回もご教示いただきまして、本当にありがとうございます。
CASE WHENでは式を2回記述する必要がありますか。
私も本日もう一度調べましたが、そのつど書く以外の回答を見つけられませんでした。
別名のつけ方も教えていただきましてありがとうございました。
試しましたが、既存のSQLに組み込むにはかなりの修正が必要になるため
今回は式を2回各方法を使うことにしました。
chukenkenkou様、何度も助けていただきまして、申し訳ございません。
あと丁寧な回答ありがとうございました。本当に感謝します。
以上です
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ACCESS2000での年齢計算(...
-
年齢計算の関数を教えて下さい
-
Excel 隣のセルが空白以外の場...
-
計算結果をCASE WHENで判断した...
-
エクセルで四捨五入ではなく、5...
-
【ACCESS】未定義関数が発生。...
-
携帯番号がわかる計算式
-
「24日の0時」って・・・
-
マクロボタンを押すと、ファイ...
-
VBAでエクセルシートを更新...
-
「時間」、「期日」、「日付」...
-
回覧板の日付について質問です...
-
エクセルで最高値、最低値の日...
-
日付の大小の表現
-
エクセルのチェックボックスを...
-
エクセルで数字から名前に変...
-
Excel関数 「日付を入力...
-
エクセル 条件が成立した場合...
-
エクセルで日付別にシートを分...
-
最新データ取得
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel 隣のセルが空白以外の場...
-
コンピューターで2進法が採用...
-
エクセルで四捨五入ではなく、5...
-
【ACCESS】未定義関数が発生。...
-
Accessについて教えて下さい。
-
ファイルメーカーで学年を表示...
-
アクセスである時点での年齢を...
-
アクセスについて
-
作業日報作成
-
計算はaccessかexcelか
-
Accessで子供の学年齢を求めた...
-
Accessの日付計算に関して
-
ファイルメーカープロ8で生年月...
-
エクセルで設定したのをアクセ...
-
アクセスの式について
-
選択クエリを開けない
-
発効日から有効期限を求める式...
-
経過年数の求め方...
-
「桐」の定義について
-
mysqlとphpでのデータ表示について
おすすめ情報