2017-05-25 8 views
-1

名前と年齢のテーブルがあります。私はcase文の使い方を理解しようとしており、次のコードを実行しようとするとエラーが発生します。彼らは以下であれば、年齢と30歳以上の人の名前を表示していました。その簡単なプログラム:大文字小文字のステートメントについてsql

Select age,             
case             
    when age>30 then Name 
    when age<30 then age 
end 
from tblPerson 

は、なぜ私はエラーを取得しています:へのnvarchar値「サム」を変換するとき、変換に失敗しましたデータ型int。

+0

これは、SQLクエリから結果の列が特定の種類のデータのみを表示できるためですか?結果の列に年齢や名前のみを表示することができますか? – TotalGadha

+0

脇に:マイクロソフトはアイデア([Sigh](https://connect.microsoft.com/SQLServer/feedback/details/1546816/remove-case-statement-from-transact-sql-documentation)を理解することはできませんが。 )、 'case'は_statement_ではなく_expression_です。 – HABO

答えて

3

名前と年齢が同じデータ型ではありません。あなたは名前のために持っているどんなデータ型にもCAST年齢が必要です。

Select age,             
    case             
     when age>30 then Name 
     when age<30 then CAST(age AS VARCHAR(3)) 
    end 
    from tblPerson 
+0

おっと!そのような単純な解決策は私の心を逃れました..あなたに感謝@SQLChao – TotalGadha

+0

ちょうどフォローアップの質問。年齢を表示するために年齢をnvarcharにキャストする必要があるのはなぜですか?年齢や名前のいずれかが表示される列に、ユーザー定義のデータ型がないことを意味します。それではなぜnvarchar値だけを表示するのですか?私の質問で以前に述べたことのためです: "SQLクエリの結果として生じる列は、特定の種類のデータのみを表示できます。結果の列には年齢や名前のみを表示できますか? – TotalGadha

+0

@totalgadhaすべての列にはデータ型が必要です。このシナリオでは、 'Name'がcase文の先頭にあるので、nvarcharを実行しようとしました。注文を変更した場合、それはintになります。 SQL Serverの「暗黙的および明示的な変換」をさらに洞察のために調べます。 – SQLChao

関連する問題