T-SQL Возвращение повторяющихся строк - PullRequest
0 голосов
/ 11 июня 2010

В следующем разделе кода возвращаются несколько столбцов для нескольких записей.

SELECT a.ClientID,ltrim(rtrim(c.FirstName)) + ' ' + </p> <pre><code>case when c.MiddleName <> '' then ltrim(rtrim(c.MiddleName)) + '. ' else '' end + ltrim(rtrim(c.LastName)) as ClientName, a.MISCode, b.Address, b.City, dbo.ClientGetEnrolledPrograms(CONVERT(int,a.ClientID)) as Abbreviation FROM ClientDetail a JOIN Address b on(a.PersonID = b.PersonID) JOIN Person c on(a.PersonID = c.PersonID) LEFT JOIN ProgramEnrollments d on(d.ClientID = a.ClientID and d.Status = 'Enrolled' and d.HistoricalPKID is null) LEFT JOIN Program e on(d.ProgramID = e.ProgramID and e.HistoricalPKID is null) WHERE a.MichiganWorksData=1

Я выделил проблему в таблицу ProgramEnrollments. Эта таблица содержит отношения «один ко многим», где каждый ClientID может быть зарегистрирован во многих программах. Таким образом, для каждой программы, в которую зарегистрирован клиент, в таблице есть запись.

Таким образом, окончательный набор результатов возвращает строку для каждой строки в таблице ProgramEnrollments на основе этих объединений.

Я предполагаю, что мое соединение - проблема, но я не вижу проблемы.

Мысли / Предложения

Спасибо

Чак

Ответы [ 2 ]

0 голосов
/ 11 июня 2010

На самом деле вы не используете какие-либо столбцы в ProgramEnrollments или Program, поэтому попробуйте удалить эти 2 JOIN.

0 голосов
/ 11 июня 2010

JOIN не является проблемой, он делает то, что должен делать с отношением один-ко-многим

Вы можете использовать оператор GROUP BY в своем запросе или альтернативно использовать дополнительный выбор длявернуть значения DISTINCT из таблиц ProgramEnrollments / Program.

Похоже, вы не используете данные из таблиц ProgramEnrollments или Program, поэтому они нужны в запросе (я полагаю, что они есть, просто подумал, что спросит)вопрос).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...