外出自粛中でも楽しく過ごす!QAまとめ>>

CASE
WHEN データ列=1 THEN 列1
WHEN データ列=2 THEN 列2
WHEN データ列=3 THEN 列3
END AS 表示列名

上の様にデータ列の値によって取ってくる列を
変えたいのですがエラーが出て列の内容が取れません。
列1~3の型はそれぞれ別の型です。

条件によって取ってくる列を
指定する方法を教えてください。
よろしくお願いします。
環境はWin2kでSQLServer2000です。

このQ&Aに関連する最新のQ&A

A 回答 (3件)

列の属性は同じである必要があります。



数値型と文字列型が混在しているのが原因なので、
数値型を文字列にキャストすればよいでしょう。
例えば 列2 だけ int で 他が varchar なら

WHEN データ列=1 THEN 列1
WHEN データ列=2 THEN cast(列2 as varchar)
WHEN データ列=3 THEN 列3

バージョンが7より前であればconvertで。
    • good
    • 0
この回答へのお礼

お答えいただきありがとうございました。
動きました、別の型だとダメだったのですね、勉強になりました。

お礼日時:2004/11/29 13:35

こんにちは。



ん???
それでいいんじゃないですか?

SELECT '表示列名' =
CASE
WHEN データ列 = 1 THEN 列1
WHEN データ列 = 2 THEN 列2
WHEN データ列 = 3 THEN 列3
END

どんなエラーになりますか?
(^^ゞ

この回答への補足

こんにちは。
takaさんが書いてくださった構文でも
同じエラーが出ます。
エラー内容は
expression から型 datetime への変換で、
算術オーバーフロー エラー
と出てます。
列の型は列1がnvarchar、
列2がDatetime、列3がDecimalとなってます。

補足日時:2004/11/29 13:11
    • good
    • 0
この回答へのお礼

列の型を変えることによって出来ました。
お答えいただき有難うございました。

お礼日時:2004/11/29 13:37

IF文ではだめなのでしょうか。

この回答への補足

IF文で書いたところ
複数の値が帰ってくる所為で
思うように動きませんでした。

補足日時:2004/11/29 13:09
    • good
    • 0
この回答へのお礼

お答え頂き有難う御座いました。

お礼日時:2004/11/29 13:43

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QSQLserver算術オーバーフローエラーについて

使用環境は DB SQL Server2008 Express
使用ツールは Microsoft SQL Server Management Studio です

SQLserver2000からSQLserver2008DBへ移行しようとしているのですが
ストアドプロシージャのところでうまくいきません

具体的には、処理を走らせると下記メッセージが出てきます

floatをデータ型numericに変換中に、算術オーバーフローエラーが発生しました
プロシージャ"○○"は、許可されていないステータスNULLを返そうとしました。
代わりにステータス0を返します

調べると 
小数点以下があるフィールド同士を掛けて、その結果の小数点以下をROUNDで切り
捨てた値を小数点のないフィールドに追加しようとするとエラーになる 
とありました。

下記 2行あたりが怪しいと思うのですが対処方法がわかりません。
ご教授願えないでしょうか?

SET @GetRand = CAST(RAND()*10 AS numeric(1,0))

SET @GetRand = CAST(RIGHT(CONVERT(varchar,CAST(RAND()*100 AS
numeric(2,0))+100),2) As numeric(2,0))

またストアドプロシージャは、VBのようにデバッグで1行単位で処理を確認してい
くことはできないのでしょうか?

使用環境は DB SQL Server2008 Express
使用ツールは Microsoft SQL Server Management Studio です

SQLserver2000からSQLserver2008DBへ移行しようとしているのですが
ストアドプロシージャのところでうまくいきません

具体的には、処理を走らせると下記メッセージが出てきます

floatをデータ型numericに変換中に、算術オーバーフローエラーが発生しました
プロシージャ"○○"は、許可されていないステータスNULLを返そうとしました。
代わりにステータス0を返します

調べると 
小数点以下があるフィールド...続きを読む

Aベストアンサー

>SET @GetRand = CAST(RAND()*10 AS numeric(1,0))

RAND()*10の値が9.5以上だと破たんする(=丸められて10になる。)ので、floorするとか。

Qエクセルの関数 ENTERを押さないと反映されない。。

エクセル2002を使用しています。
関数を使用していますが、入力結果が反映されません。大変困っています。。
関数の末尾にカーソルを持ってきてENTERを押すと、反映されます。
関数は別に難しいものではなく、SUM関数でもCOUNTIF関数でも同様のことが起こっています。新規にファイルを作成しても解決しません。
お心当たりがあれば教えて下さい!!

Aベストアンサー

計算方法が手動になっていると思われます。
ツール→オプション→計算方法タブで自動に切り替えてみて下さい。

Qエクセルのリンク解除ができない場合の対処

症状としては、時々ある事なのですが、エクセル(2003)でファイルのリンクを
編集→リンクの設定→リンクの編集→リンクの解除
をしても解除されない症状を解決するにはどうしたらよいでしょうか?
因みに外部リンクで、sumifやvlookupなどを使用しています。
また、列の非表示や、ソートでの行の非表示などはよく多用しています。
上記が起因しているかどうかは不明です。
ご存知の方いらっしゃいましたら、是非ご教授お願いします。

Aベストアンサー

名前の定義の中の参照範囲にリンク先が含まれていませんか。

エクセル2003は使っていないので、エクセル2000の場合を説明します。

「挿入」→「名前」→「定義」の「参照範囲」を確認して、リンクが含まれていれば削除して見て下さい。

リンクが含まれて無ければ、別問題ですので他の方の回答を待って下さい。


人気Q&Aランキング