2017-04-19 18 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

Subqueryが複数の値を返したというエラーが表示されます –

+2

あなたのデータはわかりませんが、selectのsun-queryがスカラー値を返さなければならないことを確認する必要があります。 –

+0

申し訳ありませんが、サブクエリはsun-queryではありません:) –

0

あなたは、おそらくこのような何かを探しています:(I彼らは構文を読んで理解することは非常に簡単になるので、あなたは、あなたがそれによってグループ化されていることを見て、DHIS_Codeあたりの割合を返すようにしたいでしょう

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 

)のCTEにごsubquerysを変更しました。

また、(Staff_Att_Status)countをcount(*)で変更しました。これは、異なる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 

あなたは、内側の別名として使用することはできません外側のクエリをエイリアシングしようとしています。

関連する問題