[英]SQL Server : calculate percentage
我需要您的帮助,因为我的SQL水平很弱,我正在尝试做一些事情,但找不到实现方法。
假设我有以下几行
| Data| Status | Date |
| A | OK | 2017-01-20 |
| B | KO | 2017-01-20 |
| C | OK | 2017-01-20 |
| A | OK | 2017-01-21 |
| B | KO | 2017-01-21 |
| C | KO | 2017-01-21 |
| A | OK | 2017-01-22 |
| B | KO | 2017-01-22 |
| C | OK | 2017-01-22 |
我想查询数据库以获得3天的OK百分比结果,所以看起来
A | 100%
B | 0%
C | 66%
我已经为1个数据完成了此操作,但是我被卡住了,也许我需要循环或其他操作:
Select
Data, (Select Count(*) From DB Where
Date between '2017-01-20' and '2017-01-22'
And Status = 'OK') * 100 / (Select Count(*) From DB
Where Date between '2017-01-20' and '2017-01-22')
From
DB
尝试这个:
SELECT Data, CAST(CAST(AVG((CASE WHEN Status='OK' THEN 100.0 ELSE 0.0 END)) AS INT) AS VARCHAR(MAX)) + '%'
FROM DB
WHERE Date BETWEEN '2017-01-20' AND '2017-01-22'
GROUP BY Data
在数据资源管理器中尝试 *特别感谢@ t-clausen.dk吸引了我这个出色的工具
SELECT
100*(count(*)-count(nullif(Status,'OK')))/count(*), Data
FROM
<yourtable>
WHERE
Date between'2017-01-20' and '2017-01-22'
GROUP BY
Data
尝试这个:
select m.data, ISNULL(((max(tot)*100)/count(m.status)), 0) percentage
from myTable m
LEFT JOIN (select data, count(status) tot from myTable m1 where status ='ok' and date between '2017-01-20' and '2017-01-22' group by m1.data) m2 on m2.data = m.data
where date between '2017-01-20' and '2017-01-22'
group by m.data
要么
select m.data,
ISNULL(((sum(case when m.status = 'ok' then 1 else 0 end)
*100)/count(m.status)), 0) percentage
from myTable m
where date between '2017-01-20' and '2017-01-22'
group by m.data
询问
select [Data],
((cast((sum(case [Status] when 'OK' then 1 else 0 end)) as decimal(5, 2))) /
cast(count([Data]) as decimal(5, 2))) * 100.00 as perc
from [your_table_name]
where [Date] between '2017-01-20' and '2017-01-22'
group by [Data];
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.