2015-11-18 70 views
0

我試圖用2個查詢((COMPLETED/TOTAL)* 100)做一個簡單的%計算,但只有一個結果選擇,但結果顯示不正確,要麼顯示100或0 。用2個查詢計算

查詢#1:

select COUNT(CODE) from TABLE1 where ORG = '111' and STATUS in ('A','COM') AND LEFT(DESC, 4) = 'JOBS' 

查詢#2:

select COUNT(CODE) from TABLE1 where ORG = '111' and STATUS IN ('R', 'A', 'COM') AND LEFT(DESC, 4) = 'JOBS' 

我能做出這樣的:

select ((select COUNT(CODE) from TABLE1 where ORG = '111' and STATUS in ('A','COM') AND LEFT(DESC, 4) = 'JOBS')/( select COUNT(CODE) from TABLE1 ORG = '111' and STATUS IN ('R', 'A', 'COM') AND LEFT(DESC, 4) = 'JOBS') *100) 

沒有成功。正如我所說的,它顯示0或100

查詢#1的結果是202和查詢#2的結果是228,所以它不是一個數學問題...

我在做什麼錯?

+0

你能給我們一些樣本數據嗎? – avalla

回答

0
SELECT a.CountCode/b.CountCode 
    FROM (
     select COUNT(CODE) CountCode from TABLE1 where ORG = '111' and STATUS in ('A','COM') AND LEFT(EVT_DESC, 4) = 'JOBS' ) a 
,  (select COUNT(CODE) CountCode from TABLE1 where ORG = '111' and STATUS IN ('R', 'A', 'COM') AND LEFT(DESC, 4) = 'JOBS') b 

另外如果你想用十進制做CAST(a.CountCode爲十進制(18,3))

0

有一件事你可能沒有注意到。 COUNT(*)會返回一個BIGINT,這與您在小學時所做的相同。您正在顯示0整數和202/228作爲粒子。

如果要劃分二百○八分之二百二十八,您將獲得1

爲了解決這個問題,你要投你的電話號碼爲十進制:

SELECT CONVERT(DECIMAL, (
      SELECT COUNT(CODE) 
      FROM TABLE1 
      WHERE ORG = '111' 
       AND STATUS IN ('A', 'COM') 
       AND LEFT([DESC], 4) = 'JOBS' 
      ))/CONVERT(DECIMAL, (
      SELECT COUNT(CODE) 
      FROM TABLE1 ORG = '111' 
       AND STATUS IN ('R', 'A', 'COM') 
       AND LEFT([DESC], 4) = 'JOBS' 
      ) * 100) 
+0

也謝謝你! – Nanaki