2013-02-13 12 views
-3

Привет ребят я эта проблема в школе:SQL Server: Проблема с использованием сам присоединяется

Существует таблица называется clientProjectDetail она имеет следующие столбцы

Clientid, ClientName, ProjectName 

в Corp базы данных.

Каждый клиент может иметь доступ к одному или нескольким проектам. Напишите SQL-запрос для возврата нескольких ProjectNames рядом с Clientnames в виде одного списка, разделенного запятыми. Я не могу понять это было у него в течение нескольких часов теперь ... Спасибо всем, кто мог бы разделить некоторое представление о

+0

Где именно вы застряли? Вам нужно будет показать нам, что вы попробовали, чтобы мы знали, что вам поможет, или, по крайней мере, углубиться в подробности о том, где вы застряли. Если вы можете отредактировать свой вопрос для ясности, отметьте его, чтобы внимание модератора было пересмотрено. –

ответ

1

Вы должны быть в состоянии использовать что-то вроде этого:

SELECT distinct c1.Clientid, 
    c1.ClientName, 
    LEFT(projects , LEN(projects)-1) projects 
FROM clientProjectDetail c1 
CROSS APPLY 
(
    SELECT c2.ProjectName + ', ' 
    FROM clientProjectDetail c2 
    where c1.Clientid = c2.Clientid 
    FOR XML PATH('') 
) m (projects) 

См SQL Fiddle with Demo

+0

Большое спасибо, я собираюсь поиграть еще и посмотреть, что еще я могу сделать. Есть ли ресурс, который вы рекомендуете для связанных с sql/tsql материалов? В дополнение к материалу школы я завершил запрос VTC. Еще раз спасибо! – user2069183

+0

@ user2069183 MSDN Books Online - хороший ресурс. – Taryn

+0

Кстати, добро пожаловать в StackOverflow. Если какой-либо из ответов на ваши вопросы будет полезен, тогда обязательно подтвердите ответ с помощью галочки слева. Если это поможет будущим посетителям, и вы получите реквизиты сайта для принятия. См. [Как принять] (http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work). – Taryn

1

Играть вокруг этого запроса: (STUFF удаляется первая запятая и FOR XML PATH ('') помогает вам Concat текст одной строкой)

SELECT Clients.ClientName, 
     Projects = STUFF(
      (
       SELECT ', ' + clientProjectDetail.ProjectName 
       FROM clientProjectDetail 
       WHERE clientProjectDetail.Clientid = Clients.Clientid 
       FOR XML PATH('') 
      ), 1, 2, '') 
FROM clientProjectDetail AS Clients 
+0

О, ничего себе! это именно то, что мне нужно ... Я собирался спросить о XML-пути, но вы ответили на него. Спасибо вам, ребята! Я собираюсь поиграть с этим материалом еще немного! Также есть ресурс, который вы, ребята, рекомендуем переходить? Пока я делал видеоролики VTC на стороне в дополнение к моим обычным материалам, связанным со школой. – user2069183

+0

Вы можете посмотреть на этот вопрос: http://stackoverflow.com/questions/3022424/recommended-book-for-sql-server-query-optimisation –

Смежные вопросы