SQL Server Иметь запрос выбора как часть одного столбца выбора

Эй, мне просто интересно, возможно ли следующее

select id, name, (select name from secondTable where companyId = tableOne.id) as concatenatedString..
from tableOne

так что я ищу выбор для каждой записи, возвращаемой в tableOne, для выполнения поиска в другой таблице и возврата всех значений для этого идентификатора записи. (Другая таблица — это таблица поиска, поэтому каждый идентификатор может иметь 1 или более записей). Если в подзапросе возвращается более 1 значения, создается одно строковое значение с разделителями-запятыми.

так что возвращаемые данные будут выглядеть так

1  Microsoft Bill,Gate,Jack
2  Apple     Jobs

person StevieB    schedule 29.08.2011    source источник


Ответы (2)


Вы хотите использовать конструкцию FOR XML PATH:

select 
    ID, 
    Name,
    stuff((select ', ' + Name
           from secondTable where companyId = tableOne.id 
           for xml path('')),
          1,2,'') [Names]
from tableOne

Функция STUFF состоит в том, чтобы избавиться от последнего ', ', который будет добавлен в конце.

Вы также можете увидеть другие примеры здесь:

person Adriano Carneiro    schedule 29.08.2011

Я не уверен, почему вы хотели бы пропустить соединение, потому что это сделало бы ваш запрос более гибким. Если вы заинтересованы в использовании подвыборки, вы можете сделать это, сделав свой подвыбор таблицы:

SELECT t1.id, t1.name, t2.name
FROM   tableOne t1
INNER JOIN (select id, name from secondTable) AS t2
on t1.id = t2.id

Конечно, ответ Эйба имеет больше смысла, если все, что вы делаете, это присоединяетесь к ID.

Если вы хотите агрегировать по выбору, если он возвращает несколько столбцов, вы можете использовать GROUP BY t1.id, t1.name.

person Evan M    schedule 29.08.2011
comment
OP хочет показать третий столбец как строку значений, разделенных запятыми. Объединение даст несколько строк на компанию, столько, сколько есть сотрудников. - person Adriano Carneiro; 29.08.2011