枢轴动态列,不聚合

我有SQL Server 2008中的调查问卷数据,我想将其转置为矩阵。
我看到了几个关于同一主题的帖子,但我只是没有摆动。

鉴于以下表格:

Question table

Answer table

Customer table

专栏:
[CustomerID][QuestionName_1] ,.., [QuestionName_n] < – 问题列的动态数量)
数据:
CustomerIDAnswer_1 ,.., Answer_n

检索列的代码:

 DECLARE @columns VARCHAR(8000) SELECT @columns = COALESCE(@columns + ',[' + cast(QuestionName as varchar) + ']', '[' + cast(QuestionName as varchar)+ ']') FROM Answer A INNER JOIN Question Q ON A.QuestionID = Q.QuestionID INNER JOIN Customer C ON A.CustomerID = C.CustomerID GROUP BY Q.QuestionName SET @columns = '[CustomerID],' + @columns DECLARE @query VARCHAR(8000) SET @query = 'Some PIVOT query without aggregation' EXECUTE(@query) 

最初的查询想法是从具有动态列的枢轴中获取的。

可以这样做,枢轴查询是什么样的?
ps:我不想使用列数最多的排名。

问候,

米歇尔

是的,你可以执行动态数据透视。 有时,使用静态版本先处理PIVOT查询会更容易,因此您可以看到查询和结果将如何显示。 然后将查询转换为动态版本。

以下是查询的静态与动态版本的示例:

静态( SQL小提琴 ):

 select * from ( select u.userid, u.fname, u.lname, u.mobile, r.question, r.choice from users u left join results r on u.questionid = r.questionid and u.choiceid = r.choiceid ) x pivot ( min(choice) for question in([are you], [from]) ) p 

动态( SQL小提琴 ):

 DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX) SET @cols = STUFF((SELECT distinct ',' + QUOTENAME(c.question) FROM results c FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)') ,1,1,'') set @query = 'SELECT userid, fname, lname, mobile, ' + @cols + ' from ( select u.userid, u.fname, u.lname, u.mobile, r.question, r.choice from users u left join results r on u.questionid = r.questionid and u.choiceid = r.choiceid ) x pivot ( min(choice) for question in (' + @cols + ') ) p ' execute(@query) 

如果您可以提供更多关于您当前表结构的详细信息,然后提供一些示例数据。 我们应该能够帮助您创建您所需要的版本。

正如我所说的,有时候从一个静态版本开始,比如在你需要先转换的列中进行硬编码,然后再转到动态版本。

Interesting Posts