在两列上旋转

时间:2017-02-15 08:16:15

标签: sql postgresql

我正在努力实现以下目标:

我有两列 - 一列有列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字段中的数字列不知道。 此外,“值”字段中的数据完全是任意的。它可以是任何行数和任何行数。

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

任何指导?

1 个答案:

答案 0 :(得分: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