我正在计算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;
答案 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;