2013-03-13 29 views
2

嗨,我是Sql编程新手。如何在数据透视表的“in”子句中写入select查询?

我有一个表“TEMP”有两个字段“姓名” &“软件”

我旋转显示的名字,对他的软件版本号的表。

我为支点查询:

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子句中会给出错误。

我该如何做到这一点?

请帮忙。提前致谢。

+0

该列表必须是静态项目的预定义列表。想象一下,列表将是一个动态列表:在查询的编译时列名是未知的。解析器应该如何检查语法? – Claude 2013-03-13 07:29:48

+0

先生,我在互联网上搜索,我发现将查询存储在一个变量,并将该变量传递给'in'子句。但实际上我不知道如何实现这一点。? @Michael – 2013-03-13 07:41:23

+2

在这种情况下,您必须以动态方式构建您的整个查询,并且必须使用'exec'执行它。 – Claude 2013-03-13 07:55:39

回答

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 ('[email protected]+')) as PVT') 

的@cols变量将包含从查询select distinct Software from temp为XML格式取出的行:即[Standard],[Personal],[Professional],然后将结果发送到使用EXEC()功能枢轴查询语句。

相关问题