Используйте SQL вместо Delete и End с клавиатуры - PullRequest
1 голос
/ 27 октября 2010

Я запускаю простую статистику ниже, которая дает следующий вывод:

select '''' + name + '''' + ',' as Emp_Names from dbo.employee

Emp_Names 
'Jason', 
'Robert', 
'Celia', 
'Linda', 
'David', 
'James', 
'Alison', 
'Chris', 
'Mary',

Есть ли способ в SQL, который может показать мой желаемый результат как:

Emp_Names 
'Jason', 'Robert','Celia','Linda','David','James','Alison','Chris','Mary',

Я могу нажать Delete и End вместе, чтобы попасть туда, но только для нескольких записей, но не для ста записей ...

Спасибо всем!

Я использую SQL Server 2005 +

Ответы [ 4 ]

2 голосов
/ 27 октября 2010

Да, но это зависит от того, какую базу данных вы используете?

В SQL Server 2005 или более поздней версии вы можете использовать функцию stuff, если вы хотите, чтобы все имена были в одном столбце.

SELECTSTUFF ((ВЫБЕРИТЕ РАЗЛИЧНЫЕ ТОП 100 ПРОЦЕНТОВ ',' + Имя ОТ РАБОТНИКА ПО ЗАКАЗУ ',' + Имя ДЛЯ ПУТИ XML ('')), 1, 1, '') или

выберите STUFF ((ВЫБРАТЬDISTINCT TOP 100 PERCENT '' ',' '' + Имя ОТ сотрудника ПОРЯДОК «,», «» + Имя ДЛЯ ПУТИ XML ('')), 1, 2, '') + '' ''
В противном случае вы можете использовать команду pivot, чтобы каждое имя было отдельным столбцом.Единственное, что нужно сделать с помощью команды pivot, это то, что вам нужно знать имена заранее, иначе вы бы использовали их вместе с функцией stuff.

1 голос
/ 27 октября 2010

Вы должны указать, какую реализацию SQL или продукт вы используете.

Если вы работаете в MySQL, вам нужна агрегатная функция GROUP_CONCAT.

Если вы работаете в R: Base, вам нужна агрегатная функция LISTOF.

0 голосов
/ 28 октября 2010

Gads, group_concat-in-sql-server , безусловно, сложнее, чем то, как я бы это сделал:

1> select sum(ID), count(*) from #b
2> go

 ----------- -----------
          41           7

1> declare @i varchar(60) 
   select @i = coalesce(@i, '') + ltrim(str(ID)) + ', ' 
   from #b 
   select @i
2> go

 ------------------------------------------------------------
 2, 3, 4, 6, 7, 8, 11,                                       

Дополнительный кредит за потерю последней запятой ....

0 голосов
/ 27 октября 2010

Здесь вы можете увидеть, как реализовать эквивалент SQL_ GROUP_CONCAT () MySQL (который, кажется, вам нужен) на SQL Server.

http://explainextended.com/2010/06/21/group_concat-in-sql-server/

Он объединит результаты каждой группы в одну строку через запятую. В этом случае ваш запрос в конечном итоге будет намного проще, чем в примере, в основном потому, что вам не нужно группировать.

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