電子書籍の厳選無料作品が豊富!

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

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

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

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が見つからない時は、教えて!gooで質問しましょう!