Привет, я новичок в программировании на Sql.

У меня есть таблица «Темп» с двумя полями «Имя» и «Программное обеспечение».

Я разворачиваю таблицу, которая отображает ему название и количество версий программного обеспечения.

Мой запрос для поворота:

select * from temp
pivot(count(Software) for Software in ([Professional],[Personal],[Standard])) as PVT

Но вместо статического значения в in ([Professional],[Personal],[Standard])

Я хочу выбрать названия программного обеспечения из выбранного запроса, который должен быть: select distinct software from temp

Когда я пишу этот запрос выбора в предложение in, он дает ошибку.

Как мне этого добиться?

Пожалуйста помоги . Заранее спасибо.

2
Mohemmad K 13 Мар 2013 в 11:18
Список должен быть заранее определенным списком статических элементов. Представьте, что список будет динамическим: имена столбцов будут неизвестны во время компиляции запроса. Как парсеру проверять синтаксис?
 – 
Claude
13 Мар 2013 в 11:29
Сэр, я поискал в Интернете и обнаружил, что нужно сохранить запрос в переменной и передать эту переменную в предложение in. Но на самом деле я не знаю, как это реализовать.? @Майкл
 – 
Mohemmad K
13 Мар 2013 в 11:41
2
В этом случае вам нужно динамически построить весь запрос и выполнить его с помощью exec.
 – 
Claude
13 Мар 2013 в 11:55
Вы можете мне помочь, как это сделать? или предоставить ссылки на соответствующее руководство для них? @Майкл
 – 
Mohemmad K
13 Мар 2013 в 12:00
См. документацию и примеры, предоставленные с документы
 – 
Claude
13 Мар 2013 в 12:05

1 ответ

Лучший ответ
Declare @cols nvarchar(max)
select @cols = 
stuff( ( select distinct  ',[' + Ltrim(rtrim(Software)) +']' from temp FOR XML PATH('')),1,1,'');

EXEC('select * from temp pivot(count(Software) for Software in ('+@cols+')) as PVT')  

Переменная @cols будет содержать строки, полученные из запроса select distinct Software from temp в формате XML: то есть [Standard],[Personal],[Professional], а затем результат будет отправлен в оператор сводного запроса с помощью функции EXEC().

2
Mohemmad K 13 Мар 2013 в 13:36