SELECt
Y.UserID,
Y.UserName,
QuestionName = ‘AnswerToQuestion’ + X.Which,
Response =
CASE X.Which
WHEN ‘1’ THEN AnswerToQuestion1
WHEN ‘2’ THEN AnswerToQuestion2
WHEN ‘3’ THEN AnswerToQuestion3
END
FROM
YourTable Y
CROSS JOIN (SELECT ‘1’ UNIOn ALL SELECT ‘2’ UNIOn ALL SELECT ‘3’) X (Which)
这对UNPIVOT的性能同样好(有时更好),并且在SQL 2000中也可以工作。
我利用了问题的相似性来创建QuestionName列,但是当然这将适用于不同的问题名称。
请注意,如果问题列表很长或问题名称很长,则可以在X表中尝试两列,一列用于问题编号,一列用于问题名称。或者,如果您已经有了一个包含问题列表的表格,则交叉加入该表格。如果某些问题为NULL,那么最简单的方法是将上述查询放入CTE或派生表中,然后添加
WHEReResponse IS NOT NULL。



