2015-10-15 2 views
0

Я пытаюсь создать отчет из пользовательских лицензий из приложения. Один пользователь может иметь несколько лицензий, как показано ниже:SQL Server - показать вывод в столбцах

user_name license name 
--------- ------------------------- 
toreilly GWM Generation Moneypoint 
toreilly GWM Generation Aghada 
toreilly GWM Generation Ardnacrusha 
toreilly GWM Asset Development 
toreilly GWM Generation Erne 
toreilly GWM Generation Dublin Bay Power 
toreilly GWM Generation Lough Ree Power 
toreilly GWM Generation Lee 

То, что я пытаюсь сделать, это показать выход в одной строке только и несколько лицензий имен в несколько столбцов, как это:

user_name  license name license name 
--------------- -------------------------- --------------------- 
toreilly GWM Generation Moneypoint GWM Generation Aghada 


Можете ли вы мне помочь?

Спасибо, Бруно

+0

Не хватило бы двух столбцов? Один с именем пользователя и один с списком имен лицензий с разделителями-запятыми? –

+0

Посмотрите на pivot https://technet.microsoft.com/en-us/library/ms177410(v=sql.105).aspx – Reinard

+0

Исправьте меня, если я ошибаюсь, но для использования PIVOT вам не нужна сводная функция ? Я просто хочу выход. Проблема с списком с разделителями-запятыми заключается в том, что это будет автоматизировано с использованием пакета SSIS, который извлекает данные в excel, но поскольку у пользователя может быть много лицензий, он усекает набор результатов в excel. –

ответ

0

С MySql f.e вы могли бы просто использовать:

SELECT user_name group_concat(license) FROM licenses GROUP BY user_name 

Это возвращает строки с именем и кома список разделенных лицензий.

MSQL не имеет функцию GROUP_CONCAT, так что вам нужно использовать что-то вроде этого:

SELECT user_name, licenses=STUFF(
    (SELECT ','+licence FROM licenses WHERE user_name=X.user_name FOR XMLPATH('')) , 1 , 1 , '') 
FROM licenses X 
GROUP BY user_name 

непроверенных и ориентировали на this

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

+0

Проблема в том, что я избегаю списка, разделенного запятыми, потому что это будет автоматизировано с использованием пакета SSIS, который извлекает данные в excel, но поскольку у пользователя может быть много лицензий, он усекает набор результатов в excel. –