vladK
Дата: 04.06.2004 17:14:10
Есть таблица посещений студентами (Student) занятий (Class) (задача реальная, в студенческие времена таким не занимался, а видать надо было:):
Attendance
ID
StudentClassID
dtDate
isAttended
isAbsent
isSick
.........
Необходимо определять пропустил ли данный StudentClassID первые три дня обучения (isAbsent=True).
Пробую так:
Идея в том чтобы найти сумму хронологически первых трех флагов isAbsent, потом можно проверить, если она = -3 то это то, что надо)
Select StudentClassID,
(Select Sum(isAbsent )
From (Select Top 3 isAbsent
From Attendance A
Where A.StudentClassID = SC.StudentClassID
Order by dtDate ))
From qryStudentClass SC
Но это не рабочий вариант т.к. самый внутренний запрос "не видит" самый внешний SC.StudentClassID
Буду благодарен за Ваши идеи.
io
Дата: 04.06.2004 17:33:08
Я пьян и за не правельные идеи проше не критиковать, мне сегодня 24.
Смотрю и вижу, что ты пытаешься использовать кориллирующий запрос так скажем 2-го уровня вложенности.
такая конструкция работает к примеру:
select id,name,(select chtoNibud from bb as b where b.id=a.id) from aa as a
Причем кориллирующий запрос обязательно долже возвращыть 1-ну строу (т.е. top 3 не подойдет)----> top 3 используй в самом внешнем запросе
Вопрос в другом, Ты говоришь что не видет самый внутренний запрос(скажем что это коррелирующий запрос 2-го уровня) сымый внешний запрос (самому такого писать не приходилось - т.е. коррелирующие запросы писал, но чтоб 2-го уровня, НЕТ).
попробуй связать внешний запрос с коррелирующим запросом 1-го уровня, а коррелирующий запрос 1-го уровня с коррелирующим запросом 2-го уровня.
И опять повтрорюсь я пьян и уже совсем плохо сооображаю.