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で質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) Rでのスクリプトのご相談 3 2022/12/08 16:22
- PHP PHP MySql ページング 2 2022/09/20 06:38
- SQL Server [SQLServer] テーブル名からカラム名を取得する 1 2022/08/23 21:20
- Excel(エクセル) VBAで組み合わせ算出やCOUNTIFSの処理を高速化したいです。 4 2022/04/07 02:38
- その他(Microsoft Office) Excelで時間計算(負) 8 2023/02/26 05:47
- C言語・C++・C# C言語 3 2022/10/04 15:07
- MySQL 次の時間帯の勝率の合計を求めるSQL文 1 2023/07/04 17:12
- Excel(エクセル) エクセルのSUM関数について 4 2023/04/18 10:37
- SQL Server 2つのSQL(Access)の結果[時刻,カウント数]を結合して集計する方法 1 2022/04/06 22:57
- その他(コンピューター・テクノロジー) 【Tableau Desktop】文字列から8桁の数字を日付型(yyyyMMdd)として取得 1 2023/07/31 10:17
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
- ・お風呂の温度、何℃にしてますか?
- ・とっておきの「まかない飯」を教えて下さい!
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・いけず言葉しりとり
- ・土曜の昼、学校帰りの昼メシの思い出
- ・忘れられない激○○料理
- ・あなたにとってのゴールデンタイムはいつですか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで四捨五入ではなく、5...
-
Excel 隣のセルが空白以外の場...
-
【ACCESS】未定義関数が発生。...
-
ファイルメーカーで時間の表示...
-
コンピューターで2進法が採用...
-
「24日の0時」って・・・
-
VBAでエクセルシートを更新...
-
日付の大小の表現
-
エクセルのチェックボックスを...
-
excelで、セル内に文字が入力さ...
-
エクセルで最高値、最低値の日...
-
Excel関数 「日付を入力...
-
Excelについて
-
「時間」、「期日」、「日付」...
-
回覧板の日付について質問です...
-
差し込み印刷に当日の日付が入...
-
Mozilla Thunderbird で日付が...
-
フォームの値をクエリーに反映...
-
エクセルで日付け表示で、明治...
-
履歴書の日付間違いで落ちますか。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel 隣のセルが空白以外の場...
-
コンピューターで2進法が採用...
-
【ACCESS】未定義関数が発生。...
-
エクセルでeのマイナス乗の計算...
-
ACCESS で深夜計算
-
ファイルメーカーで学年を表示...
-
エクセルで四捨五入ではなく、5...
-
ACCESSでの時間外計算方法
-
ファイルメーカーで小数点以下...
-
CFLOOPで計算させたいのですが
-
ファイルメーカープロ8で生年月...
-
ストアド cast演算子 char型→in...
-
アクセスである時点での年齢を...
-
SQLServerで変数を含んだ数式の...
-
チェックデジットを付加したデ...
-
アクセスのレコードが計算され...
-
計算結果をCASE WHENで判断した...
-
SQLの質問です。
-
アクセスについて
-
accessからsqlserverへの移行に...
おすすめ情報