如何在数据透视表的“in”子句中编写select查询?

时间:2013-03-13 07:18:39

标签: sql-server-2008 pivot-table

嗨,我是Sql Programming的新手。

我有一个表“Temp”有两个字段“Name”& “软件”

我正在转动一个表格,向他显示软件版本的名称和数量。

我对pivot的查询是:

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

但不是在in ([Professional],[Personal],[Standard])

中给出静态值

我想从选择查询中选择应该是:select distinct software from temp

的软件名称

当我将这个select查询写入in子句时,它会给出错误。

我如何实现这一目标?

请帮忙。提前谢谢。

1 个答案:

答案 0 :(得分:2)

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()函数将结果发送到数据透视查询语句。