在SQL Server 2008中获取百分比计数

时间:2016-01-11 16:56:58

标签: sql-server

我正在计算SQL Server中的计数但是有了这个计数我还想要百分比(%)标记在另一列中,所以请帮助

我想要这个输出:

Total-  Resolved-   Repair -    Follow-Up-  Other
135     20          15          100         0
100%    14.81%      11.11%      74.07%      0%

我的查询是这样的:

SELECT
    COUNT(*) as Total,
    (SELECT COUNT(*) FROM LMR WHERE StatusID=1) as 'Resolved',
    (SELECT COUNT(*) FROM LMR WHERE StatusID=2) as 'Repair',
    (SELECT COUNT(*) FROM LMR WHERE StatusID=3) as 'Follow-Up',
    (SELECT COUNT(*) FROM LMR WHERE StatusID=4) as 'Other'
FROM LMR;

2 个答案:

答案 0 :(得分:2)

使用Union all并将值转换为varchar:

SELECT CONVERT(varchar(5),COUNT(*)) as Total,
       CONVERT(varchar(5),(SELECT COUNT(*) FROM LMR WHERE StatusID=1)) as 'Resolved',
       CONVERT(varchar(5),(SELECT COUNT(*) FROM LMR WHERE StatusID=2)) as 'Repair',
       CONVERT(varchar(5),(SELECT COUNT(*) FROM LMR WHERE StatusID=3)) as 'Follow-Up',
       CONVERT(varchar(5),(SELECT COUNT(*) FROM LMR WHERE StatusID=4)) as 'Other'
FROM LMR
UNION ALL 
SELECT CONVERT(varchar(5),COUNT(*)*100/COUNT(*))+'%',
       CONVERT(varchar(5), ((SELECT COUNT(*) FROM LMR WHERE StatusID=1)*100/COUNT(*)))+'%',
       CONVERT(varchar(5), ((SELECT COUNT(*) FROM LMR WHERE StatusID=2)*100/COUNT(*)))+'%',
       CONVERT(varchar(5), ((SELECT COUNT(*) FROM LMR WHERE StatusID=3)*100/COUNT(*)))+'%',
       CONVERT(varchar(5), ((SELECT COUNT(*) FROM LMR WHERE StatusID=4)*100/COUNT(*)))+'%'
FROM LMR

答案 1 :(得分:0)

使用Conditional count而不是为每个select单独status

计算百分比(invidual_count/total_count) * 100

试试这个

SELECT
    COUNT(*) as Total,
    COUNT(case when StatusID=1 then 1 end)  as 'Resolved',
    COUNT(case when StatusID=2 then 1 end) as 'Repair'
    COUNT(case when StatusID=3 then 1 end) as 'Follow-Up'
    COUNT(case when StatusID=4 then 1 end) as 'Other',
FROM LMR;
UNION ALL 
SELECT
    (COUNT(*)/COUNT(*))*100 as Total,
    (COUNT(case when StatusID=1 then 1 end)/NULLIF(COUNT(*),0))*100  as 'Resolved',
    (COUNT(case when StatusID=2 then 1 end)/NULLIF(COUNT(*),0))*100 as 'Repair'
    (COUNT(case when StatusID=3 then 1 end)/NULLIF(COUNT(*),0))*100 as 'Follow-Up'
    (COUNT(case when StatusID=4 then 1 end)/NULLIF(COUNT(*),0))*100 as 'Other',
FROM LMR;