2015-11-18 69 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