支点动态列,没有聚合

支点动态列,没有聚合

我有调查问卷的数据,SQLServer 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.QuestionIDINNER JOIN Customer C ON A.CustomerID = C.CustomerIDGROUP B
Y Q.QuestionNameSET @columns = '[CustomerID],' + @columnsDECLARE @query VARCHAR(8000)SET @query = 'Some PIVOT query without
 aggregation'EXECUTE(@query)

最初的查询思想是从带动力柱的枢轴.

可以这样做吗?旋转查询会是什么样的呢?
PS:我不想使用排名与最大的列数。

问候,

米歇尔


繁星点点滴滴
浏览 456回答 1
1回答

陪伴而非守候

是的,您可以执行动态支点。有时更容易计算出PIVOT首先使用静态版本进行查询,这样您就可以看到查询和结果将如何出现。然后将查询转换为动态版本。下面是查询的静态版本和动态版本的示例:静态(SQL Fiddle):select&nbsp;*from&nbsp;( &nbsp;&nbsp;&nbsp;&nbsp;select&nbsp;u.userid, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;u.fname, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;u.lname, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;u.mobile, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r.question, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r.choice&nbsp;&nbsp;&nbsp;&nbsp;from&nbsp;users&nbsp;u&nbsp;&nbsp;&nbsp;&nbsp;left&nbsp;join&nbsp;results&nbsp;r&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;on&nbsp;u.questionid&nbsp;=&nbsp;r.questionid&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;and&nbsp;u.choiceid&nbsp;=&nbsp;r.choiceid)&nbsp;xpivot( &nbsp;&nbsp;&nbsp;&nbsp;min(choice) &nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;question&nbsp;in([are&nbsp;you],&nbsp;[from]))&nbsp;p动态(SQL Fiddle):DECLARE&nbsp;@cols&nbsp;AS&nbsp;NVARCHAR(MAX), &nbsp;&nbsp;&nbsp;&nbsp;@query&nbsp;&nbsp;AS&nbsp;NVARCHAR(MAX)SET&nbsp;@cols&nbsp;=&nbsp;STUFF((SELECT&nbsp;distinct&nbsp;','&nbsp;+&nbsp;QUOTENAME(c.question)&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FROM&nbsp;results&nbsp;c&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FOR&nbsp;XML&nbsp;PATH(''),&nbsp;TYPE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;).value('.',&nbsp;'NVARCHAR(MAX)')&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;,1,1,'')set&nbsp;@query&nbsp;=&nbsp;'SELECT&nbsp;userid,&nbsp;fname,&nbsp;lname,&nbsp;mobile,&nbsp;'&nbsp;+&nbsp;@cols&nbsp;+&nbsp;'&nbsp;from&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;( &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;select&nbsp;u.userid, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;u.fname, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;u.lname, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;u.mobile, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r.question, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r.choice &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;from&nbsp;users&nbsp;u &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;left&nbsp;join&nbsp;results&nbsp;r &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;on&nbsp;u.questionid&nbsp;=&nbsp;r.questionid &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;and&nbsp;u.choiceid&nbsp;=&nbsp;r.choiceid &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;)&nbsp;x &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pivot&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;( &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;min(choice) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;question&nbsp;in&nbsp;('&nbsp;+&nbsp;@cols&nbsp;+&nbsp;') &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;)&nbsp;p&nbsp;'execute(@query)如果您可以提供关于当前表结构的更多详细信息,然后提供一些示例数据。我们应该能够帮助您创建适合您的情况所需的版本。不过,正如我所说的,有时从静态版本开始比较容易,在静态版本中,首先需要转换列中的硬代码,然后再转到动态版本。
打开App,查看更多内容
随时随地看视频慕课网APP