我正在使用SQL Server 2008,我有两个单独的Count查询。我想将两个查询分开并乘以100得到一个百分比。
两个查询
SELECT COUNT(*) FROM
(
SELECT * FROM admin WHERE principal LIKE '%Mrs%'
UNION
SELECT * FROM admin where deputy_principal LIKE '%Mrs%'
) as Count1
SELECT COUNT(*) * 2 FROM admin as Count2
我尝试过这样的事情:
SELECT(
SELECT COUNT(*) FROM
(
SELECT * FROM admin WHERE principal LIKE '%Mrs%'
UNION
SELECT * FROM admin where deputy_principal LIKE '%Mrs%'
)
/
(
SELECT COUNT(*) * 2 FROM admin as Count2
)
)
但我得到语法错误,我无法正确调试。这是解决这个问题的正确方法吗?
它应该将Count1和Count2除以然后乘以100并将其显示为:
37%
答案 0 :(得分:3)
SELECT
((SELECT CAST(COUNT(*) AS DECIMAL(18,2)) FROM admin WHERE principal LIKE '%Mrs%'
OR deputy_principal LIKE '%Mrs%') /
(SELECT CAST(COUNT(*) * 2 AS DECIMAL(18,2)) FROM admin)) * 100
更新:比较原始方法与虚拟数据....
DECLARE @admin TABLE(Id INTEGER IDENTITY(1,1), principal VARCHAR(50),
deputy_principal VARCHAR(50))
INSERT @admin (principal, deputy_principal)
VALUES ('Mr Person 1', 'Mr Person 2'),
('Mrs Person 3', 'Mr Person 4'),
('Mr Person 5', 'Mrs Person 6'),
('Mrs Person 7', 'Mrs Person 8')
-- Original attempted way (syntax corrected)
SELECT ((
SELECT CAST(COUNT(*) AS DECIMAL(18,2))
FROM
(
SELECT * FROM @admin WHERE principal LIKE '%Mrs%'
UNION
SELECT * FROM @admin where deputy_principal LIKE '%Mrs%'
) x)
/
(SELECT CAST(COUNT(*) * 2 AS DECIMAL(18,2)) FROM @admin)) * 100
-- Shortened query
SELECT
((SELECT CAST(COUNT(*) AS DECIMAL(18,2)) FROM @admin WHERE principal LIKE '%Mrs%'
OR deputy_principal LIKE '%Mrs%') /
(SELECT CAST(COUNT(*) * 2 AS DECIMAL(18,2)) FROM @admin)) * 100
两者都输出相同的结果:本例中为37.5
答案 1 :(得分:2)
您可以使用CASE Expression
和SUM() Function
尝试以下内容:
SELECT SUM(CASE WHEN principal LIKE '%Mrs%' OR
deputy_principal LIKE '%Mrs%' THEN 100.0 END) / SUM(2) Pecentage
FROM admin
Fiddle demo 使用@AdaTheDev的数据
答案 2 :(得分:1)
你可以像这样一次完成所有这些, fiddle here
SELECT
CONVERT(
VARCHAR(10),
(
CONVERT(Real, SUM(Mrs))
/
CONVERT(Real, COUNT(*))
) * 100
) + '%'
[DoubledUpMrsPercentage]
FROM (
SELECT
CASE
WHEN [principal] LIKE '%Mrs%' OR
[deputy_principal] LIKE '%Mrs%' THEN 1
ELSE 0
END Mrs
FROM
[admin]
) Flags;
答案 3 :(得分:1)
select
cast(
sum(case when principal LIKE '%Mrs%' then 50.0 else 0 end +
case when deputy_principal LIKE '%Mrs%' then 50.0 else 0 end)
/ count(*)
as decimal(5,2)) as percnt
from admin
答案 4 :(得分:1)
Select Cast(a*100 as int)/b
from (
select count(*) a
from ERP_FMS_ChartOfAccount where CategoryID = 2)t1,
(
Select count(*) b
From ERP_FMS_ChartOfAccount where CategoryID = 1)t2
答案 5 :(得分:0)
declare @firstquerycount as integer;
declare @secondquerycount as integer;
SELECT @firstquerycount=count(*) FROM admin WHERE principal LIKE '%Mrs%';
SELECT @secondquerycount=count(*) FROM admin where deputy_principal LIKE '%Mrs%';
现在firstquerycount和secondquerycount保存各自querry的相应计数值。现在您可以根据您的要求使用它们,如
select convert(varchar(10),(((@firstquerycount+@secondquerycount)/2)*100))+'%'
注意我没有尝试此查询,请根据您的要求进行更改
答案 6 :(得分:0)
SELECT princi, total, (princi*100)/CAST(total AS REAL)
FROM
(SELECT COUNT(CASE WHEN principal LIKE '%Mrs%'
OR deputy_principal LIKE '%Mrs%'
THEN 1 END), COUNT(*)*2
FROM admin) AS X(princi,total)