2017-02-15 160 views
0

我想实现以下目标:枢轴两列

我有两列 - 一列有列ID,一列有属于此列的数据。

原始数据:

+---------+--------+ 
| ColName | Values | 
+---------+--------+ 
| Column1 |  13 | 
| Column1 |  86 | 
| Column1 |  16 | 
| Column1 |  18 | 
| Column1 |  2 | 
| Column1 |  11 | 
| Column1 |  28 | 
| Column1 |  3 | 
| Column1 |  13 | 
| Column1 |  13 | 
| Column1 |  90 | 
| Column2 |  35 | 
| Column2 |  69 | 
| Column2 |  26 | 
| Column2 |  71 | 
| Column2 |  32 | 
| Column2 |  69 | 
| Column2 |  87 | 
| Column2 |  58 | 
| ColumnN |  13 | 
| ColumnN |  54 | 
| ColumnN |  79 | 
| ColumnN |  86 | 
| ColumnN |  47 | 
| ColumnN |  37 | 
| ColumnN |  65 | 
| ColumnN |  49 | 
| ColumnN |  89 | 
| ColumnN |  27 | 
+---------+--------+ 

我希望得到以下结果:

+---------+---------+---------+ 
| Column1 | Column2 | ColumnN | 
+---------+---------+---------+ 
|  13 | 35  | 13  | 
|  86 | 69  | 54  | 
|  16 | 26  | 79  | 
|  18 | 71  | 86  | 
|  2 | 32  | 47  | 
|  11 | 69  | 37  | 
|  28 | 87  | 65  | 
|  3 | 58  | 49  | 
|  13 | NULL | 89  | 
|  13 | NULL | 27  | 
|  90 | NULL | NULL | 
+---------+---------+---------+ 

我需要这是动态的,如ID字段列数是不知道的。 另外,Values字段中的数据完全是任意的。它可以是任何行和任何数量的行。

我使用crosstab函数做了一些测试,但它似乎只适用于原始数据中有第三列的情况。

任何指导?

+0

简单它不是从你的例子清楚你从输入到输出表想正是映射。你如何从输入行组装输出行?每个“价值”值都会有一行吗?请编辑您的问题以完成以下语句:列(c1,...)的行(v1,...)在输出中,当且仅当.... PS为什么要这样做?你如何处理这件事? (显然输入和输出都很重复。) – philipxy

+0

您是否满意re dum/dee? – philipxy

回答

1

您可以使用下面的语句

select a.cvalue col1 , b.cvalue col2 
from 
(select cvalue from stack_overflow where column_id = 'column1') a 
join 
(select cvalue from stack_overflow where column_id = 'column2') b 
on a.cvalue = b.cvalue 
+0

谢谢,但这有点静态。我需要结果中的列数不被预定义。 –