как выбрать разные и объединить в SQL - PullRequest
1 голос
/ 17 января 2010

Допустим, у нас есть следующая таблица с двумя столбцами и следующими строками данных в SQLServer-2005:

Tiger    50
Wolf     4
Tiger    53
Lion     55
Elephant 54
Rhino    52
Lion     5

Можем ли мы получить SQL-запрос, который будет выглядеть следующим образом: Tiger,Wolf,Lion,Elephant,Rhino в виде однострочного вывода varchar? использование T-SQL невозможно SingE Я использую результат в C # в результате executetescalar Заранее спасибо.

Ответы [ 6 ]

3 голосов
/ 17 января 2010

Вы можете использовать for xml path для объединения значений:

select distinct name + ', ' as [text()]
from @t
for xml path('')

-->
Elephant, Lion, Rhino, Tiger, Wolf, 

Прерывание из последних 2 байтов, если вам не нравится трейлинг ,.

Не уверен, почему вы не можете использовать T-SQL, вы можете использовать его в сочетании с ExecuteScalar () очень хорошо.

Пример данных:

declare @t table (name varchar(max), id int)
insert into @t 
select 'Tiger', 50
union all select 'Wolf', 4
union all select 'Tiger', 53
union all select 'Lion', 55
union all select 'Elephant', 54
union all select 'Rhino', 52
union all select 'Lion', 5
1 голос
/ 17 января 2010
0 голосов
/ 17 января 2010

Вот как был реализован ответ Andomar. Благодаря ответу Andomar нужно узнать кое-что новое с этим.

выберите отличную SummaryColumn + ',' как [текст ()] из имени таблицы для XML-путь ('')

0 голосов
/ 17 января 2010

Наиболее эффективный способ, вероятно, заключается в использовании пользовательского агрегата , но вы также можете использовать оператор UPDATE:

DECLARE @Result varchar(500)
SET @Result = ''

UPDATE Animals
    SET @Result = @Result + Name + ','

SELECT @Result
0 голосов
/ 17 января 2010

Используйте GROUP_CONCAT () с DISTINCT:

SELECT GROUP_CONCAT(DISTINCT colName) FROM tblName;
0 голосов
/ 17 января 2010

Предполагая, что вы получаете это из ExecuteScalar и используете результирующую составную строку в C #, вы в конечном итоге напишите sproc или просто заставите свой код работать с таблицей данных.

Можете ли вы предоставить более подробную информацию о том, почему вы не можете использовать sproc? Было предоставлено несколько хороших примеров, которые отлично с этим справились бы, и вы все равно можете получить свой скалярный результат

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