- ベストアンサー
SQLの条件式
CASE WHEN データ列=1 THEN 列1 WHEN データ列=2 THEN 列2 WHEN データ列=3 THEN 列3 END AS 表示列名 上の様にデータ列の値によって取ってくる列を 変えたいのですがエラーが出て列の内容が取れません。 列1~3の型はそれぞれ別の型です。 条件によって取ってくる列を 指定する方法を教えてください。 よろしくお願いします。 環境はWin2kでSQLServer2000です。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
列の属性は同じである必要があります。 数値型と文字列型が混在しているのが原因なので、 数値型を文字列にキャストすればよいでしょう。 例えば 列2 だけ int で 他が varchar なら WHEN データ列=1 THEN 列1 WHEN データ列=2 THEN cast(列2 as varchar) WHEN データ列=3 THEN 列3 バージョンが7より前であればconvertで。
その他の回答 (2)
- taka451213
- ベストアンサー率47% (436/922)
こんにちは。 ん??? それでいいんじゃないですか? SELECT '表示列名' = CASE WHEN データ列 = 1 THEN 列1 WHEN データ列 = 2 THEN 列2 WHEN データ列 = 3 THEN 列3 END どんなエラーになりますか? (^^ゞ
お礼
列の型を変えることによって出来ました。 お答えいただき有難うございました。
補足
こんにちは。 takaさんが書いてくださった構文でも 同じエラーが出ます。 エラー内容は expression から型 datetime への変換で、 算術オーバーフロー エラー と出てます。 列の型は列1がnvarchar、 列2がDatetime、列3がDecimalとなってます。
- tyurajima
- ベストアンサー率28% (16/57)
IF文ではだめなのでしょうか。
お礼
お答え頂き有難う御座いました。
補足
IF文で書いたところ 複数の値が帰ってくる所為で 思うように動きませんでした。
お礼
お答えいただきありがとうございました。 動きました、別の型だとダメだったのですね、勉強になりました。