3

私は、AdventureWorks2012データベースを使用して T-SQL の使い方を学んでいる初心者です。私は SQL Server 2014 を使用していますが、2008 でも機能するソリューションがあればすばらしいでしょう。私は以下の演習を与えられました:

Sales.SpecialOffer テーブルを使用してクエリを作成します。MinQty 列と MaxQty 列の差を SpecialOfferID 列と Description 列と共に表示します。

MaxQtyつまり、null 値を許可するので、null をそこに残す必要のない出力の実際のソリューションを考え出そうとしています。ただし、coalesce を使用して「No Max」を返そうとすると (はい、そこに NULL をそのままにしておくことができますが、これを理解できるかどうかを確認しようとしています)、varchar値が「 No Max' を data type に変換できませんでしintた。これはMaxQty - MinQtyintが優先されるためだと思いますか?

select 
    specialofferid
    , description
    , coalesce((maxqty - minqty),'No Max') 'Qty_Difference'
from 
    sales.specialoffer;

エラー:

メッセージ 245、レベル 16、状態 1、行 135
varchar 値 'No max' をデータ型 int に変換するときに変換に失敗しました。

意味のない整数 (0 または負) を返すことだけを考えましたが、それは完璧ではないようです。0 を返すと、結果が実際にゼロである状況がわかりにくくなります。

考え?

4

2 に答える 2

0

必要なことを実行できるように、case ステートメントを使用します。

select specialofferid
, description
, CASE 
     WHEN  maxqty is null THEN 'No Max'
     ELSE (maxqty - minqty) 'Qty_Difference'
  END
from sales.specialoffer;
于 2015-07-16T18:04:45.243 に答える