SQL Server Имейте запрос выбора как часть одного столбца выбора - PullRequest
1 голос
/ 29 августа 2011

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

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

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

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

1  Microsoft Bill,Gate,Jack
2  Apple     Jobs

Ответы [ 2 ]

1 голос
/ 29 августа 2011

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

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

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

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

0 голосов
/ 29 августа 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.

...