2017-01-11 24 views
0

我有一個查詢比較使用CTE的幾周之間的數據。它存儲的一件事是百分比數據。我正在嘗試轉換或轉換任何等於100.00的值。當找到特定值時將十進制數字轉換爲整數

例如,這裏是結果將是什麼樣子

Name  Percentage  Other 
App1  99.56   5.5 
App2  100.00   6 

我希望能去除零的從100.我已經嘗試了一些情況報表,但我從來沒有我期待的結果。這是我現在擁有的。

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

您正在使用Formatting輸出字符串混淆CAST-ing數據類型。你需要更晚。列必須始終具有相同的數據類型,它不能在一行中具有一個數據類型,在下一行中不能具有不同的數據類型。 – RBarryYoung

回答

3

正如我在評論中提到的,您不能擁有包含多種數據類型的單個SQL列。

這就是說,它在你的情況下是否有用還有待觀察,但像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 

Percentage列現在是nvarchar型的,但它會以這種方式返回值:

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結果以小數形式組合到單個結果集中,則可以在返回最終結果集時將此查詢包裝到它們中,而不是爲每個CTE執行。 – Santi

+0

像魅力一樣工作。非常感謝你 – maltman

相關問題