2016-10-11 3 views
2

私は、SQL Server 2016を使用していると私は私のクエリでは、次のT-SQLコードがあります。小数点なしの出力を得るために、このT-SQL構文を修正するにはどうすればよいですか?

CAST(ROUND([Count of Bookings] * 100.0/SUM([Count of Bookings]) OVER (PARTITION BY [Market Final], [PropertyCode]), 0) AS NVARCHAR(15)) + '%' 

このコードの電流出力の例です:40.000000000000%を

私は出力を期待していましたする:ノート(これは関連性がある場合、私は知らない)として40%

Arithmetic overflow error converting expression to data type nvarchar.

:私はより低い15に nvarchar(x)で番号を変更した場合、私は次のエラーを取得します
+0

あなたは任意の10進をたくありません場所? –

+0

varcharのサイズを大きくするか、最初にintに変換して末尾の0を削除します。 –

答えて

2

利用str()代わりのcast()

str(round([Count of Bookings] * 100.0/
      sum([Count of Bookings]) over(PARTITION BY [Market Final], [PropertyCode] 
     ) , 0), 3, 0) + '%' 

は実は、私は、デフォルトでstr()ラウンド(ドキュメントはこのテーマに関するあらゆるそれほど明確だろうか?)と思う:

str([Count of Bookings] * 100.0/
    sum([Count of Bookings]) over (PARTITION BY [Market Final], [PropertyCode] 
           ), 3, 0) + '%' 
+0

美しく動作します! :-) – user3115933

0

ROUND()関数の任意の入力の戻り値の型は、MSDNのように入力データ型によって異なります。

これはあなたのROUND()はあなたがnvarcharに変換した後切り捨てる必要があります(この計算floatで)小数点でデータ型を返す(または前intにキャスト)させます。

関連する問題