Member 12899279 Ответов: 1

Как вычислить значение третьего виртуального столбца на основе значений 2 виртуальных столбцов в подзапросе


у меня есть таблица под названием посещаемость со столбцом под названием Pre(тип бита) для маркировки как отсутствующих, так и присутствующих.true для присутствующих и false для отсутствующих я вычисляю общее количество классов и посещенных классов, используя этот столбец.
теперь проблема в том, что я не могу придумать способ вычисления процента на основе значений в виртуальных столбцах, то есть общих классов и посещенных занятий.
есть ли какой-нибудь способ использовать эти значения столбцов для вычисления процента в третьем виртуальном столбце с именем Percentage?

Что я уже пробовал:

select distinct s.S_ID,s.Name
 ,(select  count(distinct A_Date) from Attendance
 where  a.C_ID=C_ID ) as Total_Classes,
 (select count(Pre) from Attendance where a.C_ID = C_ID
 and a.S_ID = S_ID and Pre = 'True') as Attended

/* (select count((Pre))/count(distinct A_Date) from Attendance where a.S_ID=S_ID and a.C_ID=C_ID) as Percentage*/
 from Course c full  join StudentCourse sc on c.C_ID = sc.C_ID
 full  join Student s on s.S_ID = sc.S_ID
 full   join Attendance a on a.S_ID = s.S_ID and a.C_ID = c.C_ID where c.C_ID =6

1 Ответов

Рейтинг:
4

Member 12899279

;with cte as (
select distinct s.S_ID,s.Name
  ,(select  cast(count(distinct A_Date)as float)from Attendance 
  where  a.C_ID=C_ID ) as Total_Classes,
  (select count(Pre) from Attendance where a.C_ID = C_ID 
  and a.S_ID = S_ID and Pre = 'True') as Attended 
  from Course c left outer join StudentCourse sc on c.C_ID = sc.C_ID 
  left outer join Student s on s.S_ID = sc.S_ID 
  left outer  join Attendance a on a.S_ID = s.S_ID and a.C_ID = c.C_ID where c.C_ID=6)
  select *,
  cast(Attended*100/nullif(Total_Classes,0) as decimal(10,2))  Percentage 
  from cte