почему мой запрос не работает. я написал запрос для определения количества отсутствующих и количества присутствующих - PullRequest
0 голосов
/ 18 сентября 2018
select [First Name],[Last Name],Class,
(
    select count([Date]) from Attendence where [Roll Number] ='1' and [Student Status] ='P' 
) as [No Of Present],
(
    select count([Date]) from Attendence where [Roll Number] ='1' and [Student Status] ='A'
)as [No Of Absent]
from Attendence
where [Date] between '2018-09-1' and '2018-09-30'

Это я написал для своего программного обеспечения, но оно не дает правильного результата. Я хочу рассчитать количество присутствующих и отсутствующих для студентов.

Ответы [ 3 ]

0 голосов
/ 18 сентября 2018

Ваш подзапрос отличается от внешнего запроса, он должен быть коррелирован:

Но вы можете сделать один оператор select с выражением case вместо двух подзапросов:

select [First Name], [Last Name], Class, 
       sum(case when [Student Status] = 'P' then 1 else 0 end) as [No Of Present], 
       sum(case when [Student Status] = 'A' then 1 else 0 end) as [No Of Absent] 
from Attendence at
where [Date] between '2018-09-1' and '2018-09-30' and [Roll Number] = '1'
group by [First Name], [Last Name], Class;
0 голосов
/ 18 сентября 2018

Я думаю, что ваш запрос может работать, но вы забыли использовать разные. Пожалуйста, найдите ниже исправленный запрос:

select distinct [First Name],[Last Name],Class,
(
select count([Date]) from Attendence where [Roll Number] ='1' and [Student Status] ='P' 
) as [No Of Present],
(
select count([Date]) from Attendence where [Roll Number] ='1' and [Student Status] ='A'
)as [No Of Absent]
from Attendence
where [Date] between '2018-09-1' and '2018-09-30'
group by [First Name],[Last Name],Class
0 голосов
/ 18 сентября 2018

использовать условную агрегацию:

select [First Name],[Last Name],Class from
count(case [Student Status] ='P' then 1 end) as [No Of Present], 
count(case [Student Status] ='A'  then 1 end)as [No Of Absent] 
from Attendence where [Date] between '2018-09-1' and '2018-09-30' and [Roll Number] ='1'
group by [First Name],[Last Name],Class
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...