Как объединить информацию из нескольких строк (связанных), не получая повторяющихся значений в моем отчете? - PullRequest
0 голосов
/ 29 мая 2020

Я создал базу данных со следующими таблицами:

  • Список учеников
  • Номера буклетов учеников
  • Потребности учеников
  • Информация об учителе

В Таблице потребностей студентов у меня есть информация, введенная примерно так:

Student ID Column, Last Name, First Name, Reading Special Need

123456             Mouse      Mickey      Dictionary  
123456             Mouse      Mickey      Extra Time  
123456             Mouse      Mickey      Small group  
123456             Mouse      Mickey      Type Answer Choices  
654321             Duck       Daffy       Dictionary  
654321             Duck       Daffy       Thesaurus  
654321             Duck       Daffy       Small Group  

Мне нужно, чтобы это вытащили примерно так:

Student ID Column, Last Name, First Name, Reading Special Need  

123456             Mouse      Mickey      Dictionary, Extra time, Small group, type answer choices  
654321             Duck       Daffy       Dictionary, Thesaurus, Small Group

I использовал функцию concatrelated в моем источнике управления отчетом, и она работает, чтобы объединить все потребности, но поскольку в моем запросе учащийся указан несколько раз, он несколько раз перечисляет учащегося в отчете. Вот так:

Student ID Column, Last Name, First Name, Reading Special Need

123456             Mouse      Mickey      Dictionary, Extra time, Small group, type answer choices  
123456             Mouse      Mickey      Dictionary, Extra time, Small group, type answer choices  
123456             Mouse      Mickey      Dictionary, Extra time, Small group, type answer choices  
123456             Mouse      Mickey      Dictionary, Extra time, Small group, type answer choices  
654321             Duck       Daffy       Dictionary, Thesaurus, Small Group  
654321             Duck       Daffy       Dictionary, Thesaurus, Small Group  
654321             Duck       Daffy       Dictionary, Thesaurus, Small Group  

Я перепробовал все, что мог придумать, чтобы исправить это - вплоть до экспорта отчета и удаления дубликатов - но затем экспорт прерывается на 255 символах - так что это не так ' т работать. Конечно, мне не хватает чего-то, что было бы относительно легко, но я не могу этого понять!

Ответы [ 2 ]

1 голос
/ 29 мая 2020

Используйте мою функцию DJoin и такой запрос:

SELECT 
    [Student Needs].[Student ID], 
    [Student Needs].[Last Name], 
    [Student Needs].[First Name], 
    DJoin("[Reading Special Need]","[Student Needs]","[Student ID] = " & [Student ID] & "",", ") AS [Reading Special Needs]
FROM 
    [Student Needs]
GROUP BY 
    [Student Needs].[Student ID], 
    [Student Needs].[Last Name], 
    [Student Needs].[First Name];

Вывод:

enter image description here

0 голосов
/ 29 мая 2020

Я создал модуль под названием «Получить список из поля таблицы», и в нем у меня есть следующий код:

Public Function GetList(sTable As String, sField As String, Optional sWhere As String, Optional sDelimiter As String, Optional UniqueValues As Boolean) As String
'   compiles all the data from a single field in a table and returns them in a string.
'   has options for providing a sql crieria, a delimiter, and if unique values should be returned
    Dim rs As Recordset
    Dim sList As String
    Dim sChar As String

    If sDelimiter = "" Then
        sChar = ","
    Else
        sChar = sDelimiter
    End If
    Set rs = CurrentDb.OpenRecordset("Select " & IIf(UniqueValues, "Distinct ", "") & sField & " From " & sTable & IIf(sWhere <> "", " Where " & sWhere, ""))
    Do While Not rs.EOF
        sList = sList & sChar & rs.Fields(sField)
        rs.MoveNext
    Loop
    rs.Close
    Set rs = Nothing

    sList = Mid(sList, 2) & sChar
    GetList = sList

End Function

В выбранном запросе вы можете попробовать:

SELECT [Student ID], [Last Name], [First Name], 
GetList("[Student Needs]","[Reading Special Need]","[Student ID] = " & [Student ID]) AS [Reading Special Needs]
FROM [Student Needs]
GROUP BY [Student ID], [Last Name], [First Name];

Я также рекомендую вам использовать символы подчеркивания или CamelCase вместо пробелов во всех именах таблиц и полей. Таким образом вы можете избежать использования скобок в своих утверждениях. Это лучшая привычка к программированию. Например:

Подчеркивание SELECT Student_ID, Last_Name, First_Name FROM Student_Needs

CamelCase SELECT StudentID, LastName, FirstName FROM StudentNeeds

...