Member 14160360 Ответов: 2

Как получить значение столбца в следующей записи


У меня есть таблица в ней два столбца student_number и course_number в этой таблице студент не может иметь более 2 курсов и я хочу получить все course_number для the student_number в одном recod in select statement в access 2007

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

Я нашел функцию в sql server 2008 это свинец но она не работает в access 2007

Herman<T>.Instance

Есть ли функция лага/лидирования в доступе?

2 Ответов

Рейтинг:
2

Maciej Los

Что ж...

Если вы хотите знать, сколько курсов студент уже имеет, вы можете использовать COUNT():

SELECT StudentID, COUNT(CourseID) As NoOfCourses
FROM YourTable
GROUP BY StudentID

Приведенный выше запрос возвращает что-то вроде этого:
StudentID NoOfCourses
1         2
2         2
3         1
4         2


Если вы хотите получить номер строки рядом с номером курса, вы можете использовать такой запрос:
SELECT A.StudentID,
    (SELECT COUNT(*) FROM YourTable WHERE A.CourseID>= CourseID) AS RowNo,
    A.CourseID
FROM YourTable AS A
ORDER BY A.StudentID

Выше запрос возвращает
StudentID CourseID RowNo
1         101        1
1         102        2
2         101        1
2         102        2
3         102        1
4         101        1
4         102        2


Наконец, вы можете ПРЕОБРАЗОВАТЬ[^] приведенные выше данные к этой форме:

StudentID 1      2
1         101    102
2         101    102
3         102    
4         101    102


Рейтинг:
1

OriginalGriff

Это сложно, потому что, хотя вы считаете, что студент может иметь не более двух курсов, "реальный мир" часто не работает так. Во всяком случае, дизайн, в котором предполагается, что у студента есть только два курса, опасен, потому что это именно то, что меняется позже. Если вы не позволите себе этого, вы сделаете свою жизнь намного, намного сложнее позже.

Это можно сделать - SQL Pivot: преобразование строк в Столбцы - блог Databricks[^] предназначен для этого - но это сложно.

Кроме того, можно обмануть:

SELECT StudentID, MAX(CourseNumber) AS Course1, MIN(CourseNumber) AS Course2
FROM MyTable
GROUP BY StudentID
Но вы не можете изменить это позже, когда вам нужно три курса.

Честно говоря, вам действительно нужно вернуть список курсов в виде отдельных строк (и отсортировать его на вашем языке презентации) или вернуть его в виде списка значений, разделенных запятыми, в одном столбце и разобраться с этим на вашем языке презентации.
Вы можете сделать это в SQL Server следующим образом:
SELECT StudentID, Courses=
   STUFF((SELECT ',' + CONVERT(VarChar(10), CourseID)
      FROM myTable b
      WHERE b.StudentID = a.StudentID
      FOR XML PATH('')), 1, 1, '')
FROM myTable a
GROUP BY StudentID 
Но я понятия не имею, будет ли это работать в Access.