2014-04-15 6 views
1

У меня есть набор данные, состоящие из ApplicationName (ApplicationAlias), а затем различен Граф UserNameSQL-Сведение группы По одностоечным

Пользователь хочет отчет свертывание (верхние 20 из этих приложений, но с добавлением Количество имени пользователя (в сочетании различного) все предыдущие строки

  • Standard Постройте приложение -. 6174
  • Standard создавать приложения, Adobe Acrobat - 6397
  • Standard создавать приложения, Adobe Acrobat, Microsoft Office Word - 6605
  • Standard создавать приложения, Adobe Acrobat, Microsoft Office Word, Microsoft Office Outlook - 6723
  • Standard Постройте приложения, Adobe Acrobat, Microsoft Office Word, Microsoft Office Outlook, Microsoft Office Excel - 6859 -... (И так on)

На данный момент я могу только думать о том, чтобы использовать оператор набора с примерно 20 объединением всех запросов с конкатенацией, как показано выше, вряд ли идеально.

Есть ли другой способ?

Я использую SQL Server и его единого Таблица ApplicationAlias ​​и UserName

Но есть еще один гаечный ключ в работах, в которых они ТОЛЬКО хотят подсчитывать число пользователей, которые имеют приложения в вопросе, то есть какие-либо другие вне списка (например, Standard Build Apps, Adobe Acrobat, Microsoft Office Word) не следует включать.

Я думаю, что это почти невозможно в SQL или, по крайней мере, может быть сделано только с операторами деталей для сбора данных с помощью Excel?

CREATE TABLE [dbo].[usersApps](
    [UserName] [varchar](100) NULL, 
    [ApplicationAlias] [nvarchar](100) NULL 
) 

| UserName | ApplicationAlias ​​|


| 10008 | Стандартные строительные приложения |


| 10008 | Adobe Acrobat |


| 10056 | Microsoft Office Word |


| 10056 | Microsoft Office Excel |


| 10059 | Symantec PGP Desktop |


+1

Какая платформа вы используете? У сервера Sql есть метод «PIVOT», который может сработать для вас. – paqogomez

+0

Да с использованием SQL-сервера – Frazer

+0

Измените свой вопрос, чтобы лучше объяснить структуру вашей таблицы. Звучит строка, у вас есть таблица с двумя столбцами, именем приложения и количеством пользователей. Это верно? – paqogomez

ответ

1

Итак, учитывая недавнее изменение, похоже, что вам нужны два столбца, список приложений и ваш пользователь с разделителями-запятыми.

"Стандарт сборки приложения, Adobe Acrobat", 10008

"Microsoft Office Word, Microsoft Office Excel", 10056

Symantec PGP Desktop», 10059

Если вы хотите для создания списка с разделителями-запятыми в sql, вы можете сделать это FOR XML PATH и STUFF.

SELECT apps = 
    STUFF((SELECT ', ' + ApplicationAlias 
      FROM usersApps b 
      where b.UserName = a.UserName 
      FOR XML PATH('')), 1, 2, ''), 
    UserName 
FROM usersApps a 
GROUP BY UserName 

Смотрите мой SQL Fiddle

Если вы хотите, чтобы исключить имена приложений, просто добавьте где не в п.

+0

Большой трюк, чтобы объединить поля, такие как «примечание клиента, примечание к заказу» и т. Д., А также. –

Смежные вопросы