Как объединить несколько записей в одну, используя номер строки?
Как я могу получить несколько записей предупреждений (до 10 на одного учащегося), которые будут отображаться в одной записи на каждого учащегося? Я пытаюсь использовать номер строки для нумерации записей, а затем помещать их в выходные данные, но написанный мною код не работает из-за неверных синтаксических ошибок в параметре "where" в операторе перекрестного применения. Я пробовал несколько способов сделать то, что мне нужно, но не могу обойти ошибки. Пожалуйста помоги.
select
sd.[student_number],
a.[health_alert],
a.[comments],
b.[health_alert],
b.[comments]
from student_enrollmentcube as se,
student_demographicscube as sd
cross apply (select a.[health_alert], a.[comments], (select row_number()
over (partition by a.[student_id] order by a.[student_id]) as r1 from
ar_student_health_alerts) a) where a.[student_id] = sd.[student_id] and
r1 = 1)
cross apply (select b.[health_alert], b.[comments], (select row_number()
over (partition by b.[student_id] order by b.[student_id]) as r2 from
ar_student_health_alerts) b) where b.[student_id] = sd.[student_id] and
r2 = 2)
where se.student_id = sd.student_id and
se.enrollment_status= 'active' and
se.[current_academic_year] = 'y'
1 ответ
У вас есть несколько проблем с вашим синтаксисом, включая неполные операторы выбора, встроенные в другие неполные операторы выбора, и даже сравнение псевдонима таблицы с литеральным значением.
Я бы порекомендовал вам разбить это на куски. Ваш оператор перекрестного применения должен иметь возможность запускаться самостоятельно, за исключением ссылки на внешнюю таблицу.
Другими словами, заставить это работать:
(select a.[health_alert], a.[comments], (select row_number()
over (partition by a.[student_id] order by a.[student_id]) as r1 from
ar_student_health_alerts) a) where a.[student_id] = sd.[student_id] and
r1 = 1)
прежде чем пытаться использовать его в кресте применить.