[英]SQL Server Dynamic Pivoting - Not Usal Pivot With Count
我需要 Pivot 问题及其答案。pivot 查询的所需 Output 如下所示,表结构也如下所示。
我在这里创建了 SQL 小提琴Sql 小提琴。 我看到了许多 pivot 的计数示例,但找不到与此类似的内容。
declare @sqlstring as varchar(max) = '';
SELECT
@sqlstring = STUFF((
SELECT distinct
',' + '[' + isnull(sq.Question, '''') + ']'
from
@surveyanswers sa
join
@SurveyQuestion sq
on sq.ID = sa.SurveyQuestionID
join
@survey sv
on sv.SurveyMasterID = sq.SurveyMasterID FOR XML PATH('')), 1, 1, '')
select
sa.SurveyID,
sv.SubmittedBy,
sq.Question,
sa.Answer into ##temp
from
@surveyanswers sa
join
@SurveyQuestion sq
on sq.ID = sa.SurveyQuestionID
join
@survey sv
on sv.SurveyMasterID = sq.SurveyMasterID
set
@sqlstring = 'SELECT SurveyID,SubmittedBy,' + @sqlstring + ' FROM (select * from ##temp ) t ' + ' PIVOT ( ' + ' max(Answer) FOR Question IN (' + @sqlstring + ' ) ) AS pivot_table' execute(@sqlstring);
您只需要一些连接来获取基础数据和动态pivot
以显示所需格式的结果。
尝试以下操作:
drop table if exists #temp
--base table with all details
select s.ID SurveyID, s.SubmittedBy, sq.Question, sa.Answer
into #temp
from @Survey s
join @SurveyMaster sm on sm.ID = s.SurveyMasterID
join @SurveyQuestion sq on sq.SurveyMasterID = s.SurveyMasterID
join @SurveyAnswers sa on sa.SurveyQuestionID = sq.ID and sa.SurveyID = s.ID
--dynamic pivot
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX);
select @cols = STUFF((SELECT distinct ',' + QUOTENAME(c.Question)
FROM #temp c
ORDER BY 1 DESC
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = 'SELECT SurveyID, SubmittedBy, ' + @cols + ' from
(
select SurveyID, SubmittedBy, Question, Answer
from #temp
) x
pivot
(
max(Answer)
for Question in (' + @cols + ')
) p '
--execution
execute(@query)
请在此处找到 db<>fiddle。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.