如何按2列取消透视sql表[重复]

Posted

技术标签:

【中文标题】如何按2列取消透视sql表[重复]【英文标题】:How to unpivot sql table by 2 colums [duplicate] 【发布时间】:2014-06-12 22:46:51 【问题描述】:

我有一行数据(姓名、地址、question_ID_1、Answer_1、question_ID_2、Answer_2 等),并希望将其还原为:

row1: name, address, question_ID_1, Answer_1;
row2: name, address, question_ID_2, Answer_2;
row3: name, address, question_ID_3, Answer 3; etc.

我已经设法得到了这个变化,但不是最终结果。我已经连接了问题和答案字段,并且不介意使用它进行反透视- 所以...

row1: name, address, QA1;
row2: name, address, QA2;
row3:  name, address, QA3 etc.

我也有可变数量的列,具体取决于导入。

我正在将平面文件(使用 SSIS)导入 SQLServer 2005 表,然后使用存储过程将数据转换为所选格式。您可以提供的任何代码都会有很大帮助。

【问题讨论】:

【参考方案1】:

您可以使用 UNPIVOT 将列转换为行。

SELECT name, address, question, answer
FROM questions
UNPIVOT
  (question for q in (question_ID_1, question_ID_2)) as q
UNPIVOT 
  (answer for a in (answer_1, answer_2)) as a
WHERE RIGHT(q,1) = RIGHT(a,1)

这里有一个 SqlFiddle 来展示这个:http://sqlfiddle.com/#!3/e6919/3

【讨论】:

以上是关于如何按2列取消透视sql表[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在多个日期行上透视表[重复]

SQL 动态数据透视表列顺序

SQL 反透视该行并获取订单号

如何将excel一行的有重复数据按重复出现次数的大小重新排列!在线等!

尝试在 Oracle SQL 中取消透视列时出错

SQL 查询一表所有数据 有重复的按时间取第一条