语法错误附近,)

问题描述:

这是我的查询,但在最后一行“)”将返回错误和3号线“”语法错误附近,)

select (present/total)*100 from( 
    (select count(Staff_Att_Status) from vu_StaffInfo where Staff_Att_Status='Present' group by DHIS_Code) as present, 
    (select count(Staff_Att_Status) from vu_StaffInfo group by DHIS_Code) as total 
    ) as "result" 

select (present/total)* 100.00 --<-- Also use decimal here to get % values like 0.01 
FROM( 
    SELECT --<-- You need a select key word here 
      (select count(Staff_Att_Status) from vu_StaffInfo where Staff_Att_Status='Present' group by DHIS_Code) as present, 
      (select count(Staff_Att_Status) from vu_StaffInfo group by DHIS_Code) as total 
    ) as "result" 
+0

它给出了一个错误,即子查询返回多个值 –

+2

嗯,我不知道你的数据,但你需要确保select中的任何sun-query都必须返回一个标量值。 –

+0

对不起,我打算说子查询不是太阳查询:) –

您可能正在寻找的东西是这样的:(我改变了你的subquerys到热膨胀系数,因为它们会导致在一个非常容易阅读和理解语法)

with present 
as (
    select DHIS_Code, count(*) as count 
    from vu_StaffInfo where Staff_Att_Status='Present' 
    group by DHIS_Code 
), 

with total 
as (
    select DHIS_Code, count(*) as count 
    from vu_StaffInfo 
    group by DHIS_Code 
) 

select total.DHIS_Code, (isnull(present.count,0)/total.count) * 100.00 
from total 
    left outer join present on present.DHIS_Code = total.DHIS_Code 

你希望回到每DHIS_Code的百分比,看到你被它的分组。

此外,我通过count(*)更改了count(Staff_Att_Status),因为您希望这些数据集上的行数,而不是不同的Staff_Att_Status的数量。例如,在目前的数据集中,它总是1,因为在那里你只有“存在”状态。

试试这个..

select (present/total)*100 "result" from 
    (select count(Staff_Att_Status) from vu_StaffInfo where Staff_Att_Status='Present' group by DHIS_Code) as present, 
    (select count(Staff_Att_Status) from vu_StaffInfo group by DHIS_Code) as total 

正在尝试走样,不能被用作内部别名外查询。