2017-01-11 17 views
0

CTEを使用して週間のデータを比較するクエリがあります。それが格納するものの1つはパーセンテージデータです。私は100.00に等しい値を変換またはキャストしようとしています。例えば特定の値が見つかったときにdecimalをintとしてキャスト

は、ここでの結果は、私はいくつかのケース文を試してみましたが、私は私が探しています結果を得ることはありません100からゼロさんを削除するには期待しています

Name  Percentage  Other 
App1  99.56   5.5 
App2  100.00   6 

どのように見えるかです。ここに私が今いるものがあります。

SELECT 
    f.Application, 
    f.Percentage, 
    f.Other, 
    CASE 
     WHEN f.Percentage = 100.00 
     THEN 100 
    END AS Percentage 
FROM Table1 f 

現在、100.00の値は100に変更されています。ただし、100.00以外の値はすべてゼロになります。

ELSE f.Percentage 

ただし、100.00は変更されません。

ご協力いただければ幸いです。

+3

SQLフィールド/列ことはできません

の例では、このようなものになるだろう'float/decimal'の値を持つレコードと' int'のレコードを持つことはできません。私の知る限りでは(このサイトにはSQLよりもはるかに多くの人がいますが)、文字列型( 'nvarchar'など)では小数点と整数の両方の値を扱うことができますが、データはもちろん、文字列値として返されます。 – Santi

+0

このクエリは何を消費していますか?余分な「.00」はなぜ問題なのですか?これは、表示コードで処理できる(そうすべき)ようなものです。 – Blorgbeard

+2

CAST-ingデータ型と出力文字列の書式設定を混同しています。後で必要です。列は常に同じデータ型を持たなければならず、1つの行に対して1つのデータ型を持ち、次の行に異なるデータ型を持つことはできません。 – RBarryYoung

答えて

3

コメントで述べたように、複数のデータ型を含む単一のSQL列を持つことはできません。

あなたのケースでは有用かどうかは分かりませんが、nvarcharのような文字列型は両方を扱うことができますが、コードでは数字の代わりに文字列として扱える必要があります。 Percentage列が今タイプnvarcharであろうが、それはこの方法で値を返します

SELECT 
    f.Application, 
    f.Percentage, 
    f.Other, 
    CASE 
     WHEN f.Percentage = 100.00 
     THEN '100' 
     ELSE CAST(f.Percentage as nvarchar(10)) 
    END AS Percentage 
FROM Table1 f 

Name  Percentage  Other 
App1  99.56   5.5 
App2  100   6 
App3  91.23   3.5 
App4  94.41   4.8 
App5  100   6 
+0

私は2つのCTEを作成し、最後に結合するので、これらの変更を最後に追加するか、各CTEに追加するだけですか?また、これはSQL Reporting Servicesで行われているため、データの受信は正常です。 – maltman

+0

CTEの結果を1つの結果セットに小数点として結合した場合、最終的な結果セットを返すときに、各CTEで実行する代わりに、このクエリをラップすることができます。 – Santi

+0

は魅力的に働いた。本当にありがとうございました – maltman

関連する問題