• ベストアンサー

SQLの条件式

CASE WHEN データ列=1 THEN 列1 WHEN データ列=2 THEN 列2 WHEN データ列=3 THEN 列3 END AS 表示列名 上の様にデータ列の値によって取ってくる列を 変えたいのですがエラーが出て列の内容が取れません。 列1~3の型はそれぞれ別の型です。 条件によって取ってくる列を 指定する方法を教えてください。 よろしくお願いします。 環境はWin2kでSQLServer2000です。

質問者が選んだベストアンサー

  • ベストアンサー
  • utakataXEX
  • ベストアンサー率69% (711/1018)
回答No.3

列の属性は同じである必要があります。 数値型と文字列型が混在しているのが原因なので、 数値型を文字列にキャストすればよいでしょう。 例えば 列2 だけ int で 他が varchar なら WHEN データ列=1 THEN 列1 WHEN データ列=2 THEN cast(列2 as varchar) WHEN データ列=3 THEN 列3 バージョンが7より前であればconvertで。

noname#9122
質問者

お礼

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

その他の回答 (2)

回答No.2

こんにちは。 ん??? それでいいんじゃないですか? SELECT '表示列名' = CASE WHEN データ列 = 1 THEN 列1 WHEN データ列 = 2 THEN 列2 WHEN データ列 = 3 THEN 列3 END どんなエラーになりますか? (^^ゞ

noname#9122
質問者

お礼

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

noname#9122
質問者

補足

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

  • tyurajima
  • ベストアンサー率28% (16/57)
回答No.1

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

noname#9122
質問者

お礼

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

noname#9122
質問者

補足

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

関連するQ&A