2015-09-15 52 views
-1

我正在構建Oracle SQL query.I嘗試獲得在兩個日期之間銷售最多國際支付的推銷員。爲什麼我的百分比0在SQL Server上運行?

我有以下查詢

SELECT ddo.CODE as "Salesman ID", ROUND((count(fpp.ID)/
    (SELECT count(fpp2.ID) 
    FROM Payments_Table fpp2 
     JOIN Clients_Table da2 ON fpp2.Client_ID = da2.ID 
     JOIN Currency_Table dc2 ON dc2.ID = fpp2.CURRENCY_ID 
    WHERE dc2.CURRENCY_CODE != da2.CURRENCY 
    ) * 100), 2) AS "% Different currency" 
FROM Salesmen_Table ddo 
    JOIN Payments_Table fpp ON ddo.ID = fpp.DATA_OWNER_ID 
    JOIN Clients_Table da ON fpp.ORDERING_ACCOUNT_ID = da.ID 
    JOIN Currency_Table dc ON fpp.CURRENCY_ID = dc.ID 
WHERE da.CURRENCY != dc.CURRENCY_CODE 
GROUP BY ddo.CODE 

應該給一個遞減名單,根據國際收支的百分比。像下面這樣:

  • 推銷員ID%不同的貨幣
  • 傑克66.66
  • 約翰33.33

我有我的數據庫3金,2傑克和1約翰,所以這是我期望的結果。但是我的%的結果是0.這是怎麼回事?

+0

你可以考慮使用RATIO_TO_REPORT解析函數。 – user2672165

+0

將兩個計數作爲單獨的字段添加,以確保除數不是很大,以至於百分比小於0.01% –

+0

預期百分比是33.33和66.66,所以我不認爲這解決了問題。 – Jonas

回答

2

UPDATE

的差異造成的,因爲甲骨文的INTEGER本質上是NUMBER(38,0)的別名。有一個相關的SO問題here。除了兩個整數實際上執行十進制除法,因此1/2將返回0.5。另一方面,SQL Server有幾個整數類型(smallint,tinyint,int),除法整數執行整數除法。 1/2將返回0

ORIGINAL

你將整數。在整數除法中,結果本身就是一個整數。這意味着小於100%(即1)的百分比值變爲0.

您應該在劃分之前將至少一個操作數轉換爲浮點/小數。這是由100.0分紅倍增,例如簡單:

ROUND((100.0*count(fpp.ID))/... 
+0

這是不正確的 - [SQLFIDDLE](http://sqlfiddle.com/#!4/529a2/1/0)給出了一個帶有兩個整數列('NUMBER(1,0)')的表的例子,除法結果是小數點。 – MT0

+1

@ MT0我回答說問題仍然被標記爲'sql-server'。 –

+0

此查詢適用於Oracle和SQL Server – Jonas