2017-04-19 153 views
-1

這是我的查詢,但在最後一行「)」將返回錯誤和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" 

回答

1
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

對不起,我打算說子查詢不是太陽查詢:) –

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,因爲在那裏你只有「存在」狀態。

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 

正在嘗試走樣,不能被用作內部別名外查詢。