アプリ版:「スタンプのみでお礼する」機能のリリースについて

SELECT TOP (100) PERCENT
ACODE * 10 + CCODE AS Aコード,
ACODE * 1000 + CCODE * 100 + GCODE AS Bコード,
CASE WHEN [GCODE] = 0 THEN [CHIBAN] ELSE [GCODE] END AS 番地,
MIN(DISTINCT X) AS X,
MIN(DISTINCT Y) AS Y
FROM
dbo.Tbl
GROUP BY
ACODE * 10 + CCODE, ACODE * 1000 + CCODE * 100 + GCODE, CASE WHEN [GCODE] = 0 THEN [CHIBAN] ELSE [GCODE] END
ORDER BY
字丁目コード, 号特定コード, 番地


上記のクエリを実行すると「データ型 nvarchar を float に変換中にエラーが発生しました。」というメッセージが表示されてしまいます。
おそらく[CHIBAN]フィールドはnvarchar型のためエラーが発生していると思うのですが、
なぜ強制的にfloat型にしようとするのかわかりません。

どのように回避すればよいでしょうか。ご教示のほどお願い致します。

「SQLserver2005 nvarch」の質問画像

A 回答 (1件)

>CASE WHEN [GCODE] = 0 THEN [CHIBAN] ELSE [GCODE] END



上記のCASE文の[GCODE]が数値型のようなので暗黙の型変換が行われているのでしょう。

なので、[CHIBAN]内に文字列が入っていて変換できないのでしょう。

戻り値の型
http://msdn.microsoft.com/ja-jp/library/ms181765 …
>result_expressions およびオプションの else_result_expression の型のセットの中から、最も優先順位の高い型を返します。詳細については、「データ型の優先順位 (Transact-SQL)」を参照してください。

データ型の優先順位
http://msdn.microsoft.com/ja-jp/library/ms190309 …

CASTで文字列に明示的に変換すればよいでしょう。
http://msdn.microsoft.com/ja-jp/library/ms187928 …

データ
[GCODE] [CHIBAN]
0A
01
03
1A
1B


エラーケース
select
CASE WHEN [GCODE] = 0 THEN
[CHIBAN]
ELSE
[GCODE]
END AS 番地
from test

オッケーケース
select [GCODE],[CHIBAN],
CASE WHEN [GCODE] = 0 THEN
[CHIBAN]
ELSE
CAST([GCODE] AS nvarchar(10))
END AS 番地
from test

GCODECHIBAN番地
0A A
01 1
03 3
1A 1
1B 1

Select時には型を合せましょう。
    • good
    • 0
この回答へのお礼

ご親切な回答ありがとうございます。
解決いたしました。

>Select時には型を合せましょう。
Accessで慣れていたもので。。。お恥ずかしいです。

ありがとうございます。助かりました。

お礼日時:2009/05/12 20:22

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

このQ&Aを見た人はこんなQ&Aも見ています

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