【发布时间】:2021-02-11 12:12:00
【问题描述】:
我有一个特定的数据集,该数据集已在 SQL 中进行了透视。现在我想用列标题名称替换行值,这太动态了。
初始表
| StudentID | Response | QuestionID |
|---|---|---|
| S1 | TRUE | Question2 |
| S1 | TRUE | Question3 |
| S2 | TRUE | Question1 |
| S2 | TRUE | Question2 |
| S2 | TRUE | ..QuestionN |
透视后的表格-
| StudentID | Question1 | Question2 | Question3 | ..QuestionN |
|---|---|---|---|---|
| S1 | NULL | TRUE | TRUE | NULL |
| S2 | TRUE | TRUE | NULL | TRUE |
预期输出
| StudentID | Question1 | Question2 | Question3 | ..QuestionN |
|---|---|---|---|---|
| S1 | NULL | Question2 | Question3 | NULL |
| S2 | Question1 | Question2 | NULL | QuestionN |
我使用下面的代码在“初始表”中的“枢轴后表”中进行枢轴。
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX);
SET @cols = STUFF((SELECT distinct ',' + QUOTENAME(c.TopicId)
FROM test c
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = 'SELECT StudentId, ' + @cols + ' from
(
select StudentId
, Response
, TopicId
from test where Response = ''TRUE''
) x
pivot
(
max(Response)
for TopicId in (' + @cols + ')
) p '
execute(@query)
那么我可以在现有查询中进行更改或在现有查询中进行新的吗?
【问题讨论】:
-
如果想继续您现有的查询,只需将
max(Response)更改为max(TopicId)。
标签: sql-server pivot