2011-08-06 27 views
0

我正在上課的任務,我一直停留了大約兩個小時就這個問題:麻煩在SQL Server中顯示與CONVERT功能小數點

「項目發票平均總價,最小總價格和最高總價格。 貨幣總是格式化爲小數點後兩位。「

所以,我想出了這個查詢:

SELECT 
CONVERT(DECIMAL(8),AVG(INV.TotalPrice),2) AS 'Average Price', 
CONVERT(DECIMAL(8),MIN(INV.TotalPrice),2) AS 'Miniumum Price', 
CONVERT(DECIMAL(8),MAX(INV.TotalPrice),2) AS 'Maximum Price' 
FROM INVOICE INV; 

的數學函數工作得很好,但我無法小數點後才能到數字和小數點本身價格後。例如,在「平均價格」上,我得到「187」的輸出,但我需要「187.00」。

我有點卡住了。我試過翻看堆棧溢出的其他問題,但我還沒有找到解決我的具體問題的問題。任何幫助,將不勝感激。

+0

參見[寫入保留兩位小數SQL服務器數量]( http://stackoverflow.com/q/441600/161052) – JYelton

回答

2
SELECT 
CONVERT(DECIMAL(8,2),AVG(INV.TotalPrice)) AS 'Average Price', 
CONVERT(DECIMAL(8,2),MIN(INV.TotalPrice)) AS 'Miniumum Price', 
CONVERT(DECIMAL(8,2),MAX(INV.TotalPrice)) AS 'Maximum Price' 
FROM INVOICE INV; 

DECIMAL數字類型需要第二個參數(規模)返回小數點後兩位。看起來你的看法是正確的,但是論點卻被傳遞到了錯誤的地方。

+0

哦,太好了。謝謝。 – krebshack

2

問題是您正在轉換爲數字類型。數字類型表示數量,所以您應該像考慮數學一樣考慮它們。

187 == 187.0 == 187.00000 == 187.0000000000 

所有這些都是完全相同的值,所以在數字類型中,它們將以相同的方式表示(通常)。

字符串表示組成一個值的字符。字符串可以表示文本,如「這是一個字符串」或「快速的棕色狗」或「235136513509835」。

在字符串:基於

"187" != "187.00" != "187.0000" 

上,我建議轉換爲字符串。我沒有Windows機器,所以我不能肯定,但嘗試這樣的:

SELECT 
CAST(CONVERT(DECIMAL(8,2),AVG(INV.TotalPrice)) AS varchar(8)) AS 'Average Price', 
CAST(CONVERT(DECIMAL(8,2),MIN(INV.TotalPrice)) AS varchar(8)) AS 'Miniumum Price', 
CAST(CONVERT(DECIMAL(8,2),MAX(INV.TotalPrice)) AS varchar(8)) AS 'Maximum Price' 
FROM INVOICE INV; 

看看這裏:http://msdn.microsoft.com/en-us/library/ms187928.aspx

+0

它會正常工作,而無需轉換爲varchar。 op只是沒有用於DECIMAL()的語法。 –