2017-10-10 49 views
0

我有作爲SQL查詢的一部分的Sql返回0,其中一個比預期

SELECT 
    TransID, 
    SUM(isSatisfactory) as SatTr, 
    count(AllTrades.AllTradeIndex) as AllTr, 
    (SUM(isSatisfactory)/count(AllTrades.AllTradeIndex)) * 100 as RatioOf 

    FROM 
     ...Several subqueries here... 
    GROUP BY TransID 

的結果是

strTransID SatTr AllTr RatioOfGoodAccounts 
307319906 6  12  0 

如果我選擇沒有組和數學的列,這是結果設置

strTransID isSatisfactory AllTradeIndex 
    307319906 NULL   1334036 
    307319906 NULL   1334037 
    307319906 NULL   1334038 
    307319906 NULL   1334039 
    307319906 NULL   1334040 
    307319906 1    1334041 
    307319906 NULL   1334042 
    307319906 1    1334043 
    307319906 1    1334044 
    307319906 1    1334045 
    307319906 1    1334046 
    307319906 1    1334047 

我想也許是空搞亂它,但我想聚結,並沒有影響結果。

+1

整數運算。如果數據類型是整數(無小數),則在SQL服務器中將'(SUM(isSatisfactory)/ count(emplodes.AllTradeIndex))'改爲'(SUM(isSatisfactory * 1.0)/ count然後評估結果也是整數(無小數)來解決,將數據類型轉換爲所需長度的十進制或乘以小數,以便引擎知道在結果中包含小數。 [文檔顯示這是預期](https://docs.microsoft.com/en-us/sql/t-sql/language-elements/divide-transact-sql) – xQbert

+0

@xQbert是的,這是我的問題是。 –

回答

0

你的提名者和分母都是整數,所以你正在執行integer division,在這種情況下只留下「整個」部分,即0

您可以使用浮點除法,通過將提名顯式轉換爲浮點類型。或者甚至更簡單,因爲無論如何你都會乘以數字文字,只需使用浮點文字即可。但請注意,它必須使用以前師,後吧:

(SUM(isSatisfactory) * 100.0/COUNT(AllTrades.AllTradeIndex)) AS RatioOf 
-- Here ---------------^