Возврат нескольких значений в одном столбце в основном запросе - PullRequest
1 голос
/ 10 декабря 2010

Я пытаюсь найти относительную информацию из таблицы и вернуть эти результаты (вместе с другими несвязанными результатами) в одну строку как часть более крупного запроса.

Я уже пытался использовать этот пример, модифицированный для моегоdata.
Как вернуть несколько значений в одном столбце (T-SQL)?
Но я не могу заставить его работать.Он не будет извлекать какие-либо данные (я уверен, что это ошибка пользователя [ me ]).

Если я запрашиваю таблицу напрямую, используя TempTable, я могу правильно получить результаты.

DECLARE @res NVARCHAR(100)  
SET @res = ''  
CREATE TABLE #tempResult ( item nvarchar(100) )  
INSERT INTO #tempResult  
SELECT Relation AS item  
FROM tblNextOfKin  
WHERE ID ='xxx' AND Address ='yyy'  
ORDER BY Relation   
SELECT @res = @res + item + ', ' from #tempResult  
SELECT substring(@res,1,len(@res)-1) as Result  
DROP TABLE #tempResult  

Обратите внимание, что строка WHERE выше, xxx и ггг будет варьироваться в зависимости от входных критериев дляфункция.но так как вы не можете использовать TempTables в функции ... Я застрял.

Соответствующие поля в таблице, которую я пытаюсь запросить, следующие:
tblNextOfKin
ID - varchar (12)
Имя - varchar (60)
Отношение - varchar (30)
Адрес - varchar (100)

Надеюсь, это имеет достаточно смысла ... Я видел в другом посте выражение, котороеподходит.
Мой SQL-фу не очень хорош.

Как только я получу работающую функцию, я помещу ее в основной запрос для пакета служб SSIS, над которым я работаю, который извлекает данные из многих другихтаблицы.

Я могу предоставить более подробную информацию, если это необходимо, но сайт сказал, чтобы было проще, и я попытался сделать это.

Спасибо !!!

Follow-вверх (потому что, когда я добавил комментарий к ответу ниже, я не мог редактировать форматирование)
Мне нужно иметь возможность получать результаты из разных столбцов.
ID Имя Адрес для связи
1, Mike, SON,100 Main St.
1, Sara, DAU, 100 Main St.
2, Tim, SON, 123 South St.
Both первые два человека живут по одному и тому же адресу, поэтому, если я запрашиваю ID = '1' и Address = '100 Main St.'Мне нужно, чтобы результаты выглядели примерно так ...
"DAU, SON"

Ответы [ 2 ]

0 голосов
/ 10 декабря 2010

Я думаю, вам нужно что-то вроде этого (SQL Server):

  SELECT stuff((select ',' +Relation 
  FROM tblNextOfKin a
  WHERE ID ='xxx' AND Address ='yyy'  
  ORDER BY Relation
  FOR XML path('')),1,1,'') AS res;
0 голосов
/ 10 декабря 2010

Mysql имеет GROUP_CONCAT

SELECT GROUP_CONCAT(Relation ORDER BY Relation SEPARATOR ', ') AS item  
FROM tblNextOfKin  
WHERE ID ='xxx' AND Address ='yyy' 

Вы можете сделать это для всей таблицы с помощью

SELECT ID, Address, GROUP_CONCAT(Relation ORDER BY Relation SEPARATOR ', ') AS item  
FROM tblNextOfKin  
GROUP BY ID, Address 

(при условии, что идентификатор не уникален)

примечание: это обычно плохая практика в качестве промежуточного шага, это допустимо только в качестве окончательного форматирования для презентации (в противном случае вы в конечном итоге разгруппируете это, что будет больно)

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