Как объединить несколько записей в одну, используя номер строки?

Как я могу получить несколько записей предупреждений (до 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)

прежде чем пытаться использовать его в кресте применить.

Другие вопросы по тегам