SQL 旋转多个记录,字符串数据
SQL Pivot numerous records, string data
我有三列,每一列都是 NVARCHAR。对于保存数据的第二列的每个实例,我的第一个 'Id' 列出现多次(在第三列中。
我曾尝试使用数据透视运算符,但在使用字符串数据时遇到问题。
Table 示例:
RecordId QuestionText Data
1 Completion Date 26/01/2016
1 Gender M
1 PreCourse Info 2
1 Application Process 1
枢轴要求示例:
RecordId Completion Date Gender Precourse Info Application Process
1 26/01/2016 M 2 1
对上面的裤子 table 布局表示歉意。
数据量很大(1595 个不同的 RecordId),每个 RecordId 大约有 50 行。
我在阅读了一些帖子后尝试了以下方法:
SELECT *
FROM
(
SELECT
RecordId
,QuestionText
,Data
FROM #PrePivot
) AS P
PIVOT
(
Data FOR QuestionText
) AS Pvt
如果您能告诉我我的代码中是否缺少某些东西,或者最好不要使用数据透视运算符,我们将不胜感激。
感谢您的宝贵时间
将
试试这个:
;WITH PivotData AS
(
SELECT
RecordId,
QuestionText,
Data
FROM #PrePivot
)
SELECT RecordId, [Completion Date], [Gender],[PreCourse Info], [Application Process]
FROM PivotData
PIVOT( MAX(Data)FOR QuestionText IN ([Completion Date], [Gender],[PreCourse Info], [Application Process])) AS P;
两条评论:
- 您必须明确指定要在输出中看到的列列表。
- 你必须使用一些聚合函数。但是,我们实际上不想在这里计算任何聚合。相反,我们只想显示 Data 列的内容。这就是我使用
MAX
函数的原因。假设对于给定的 RecordId QuestionText 列中没有重复项,它将起作用。
我有三列,每一列都是 NVARCHAR。对于保存数据的第二列的每个实例,我的第一个 'Id' 列出现多次(在第三列中。
我曾尝试使用数据透视运算符,但在使用字符串数据时遇到问题。
Table 示例:
RecordId QuestionText Data
1 Completion Date 26/01/2016
1 Gender M
1 PreCourse Info 2
1 Application Process 1
枢轴要求示例:
RecordId Completion Date Gender Precourse Info Application Process
1 26/01/2016 M 2 1
对上面的裤子 table 布局表示歉意。
数据量很大(1595 个不同的 RecordId),每个 RecordId 大约有 50 行。
我在阅读了一些帖子后尝试了以下方法:
SELECT *
FROM
(
SELECT
RecordId
,QuestionText
,Data
FROM #PrePivot
) AS P
PIVOT
(
Data FOR QuestionText
) AS Pvt
如果您能告诉我我的代码中是否缺少某些东西,或者最好不要使用数据透视运算符,我们将不胜感激。
感谢您的宝贵时间
将
试试这个:
;WITH PivotData AS
(
SELECT
RecordId,
QuestionText,
Data
FROM #PrePivot
)
SELECT RecordId, [Completion Date], [Gender],[PreCourse Info], [Application Process]
FROM PivotData
PIVOT( MAX(Data)FOR QuestionText IN ([Completion Date], [Gender],[PreCourse Info], [Application Process])) AS P;
两条评论:
- 您必须明确指定要在输出中看到的列列表。
- 你必须使用一些聚合函数。但是,我们实际上不想在这里计算任何聚合。相反,我们只想显示 Data 列的内容。这就是我使用
MAX
函数的原因。假设对于给定的 RecordId QuestionText 列中没有重复项,它将起作用。