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

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 функция состоит в том, чтобы избавиться от финала ', ' который будет добавлен в конце.

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

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

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.

Другие вопросы по тегам