Oracle SQL-将列转换为行,同时保留一列

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle SQL-将列转换为行,同时保留一列相关的知识,希望对你有一定的参考价值。

我有下表(它实际上是从复杂逻辑派生的视图):

|    TYPE | FIELD1 | FIELD2 | FIELD3 | FIELDNEEDSTOSTAYASCOLUMN |
|---------|--------|--------|--------|--------------------------|
|     bad |      1 |      1 |      1 |                     1000 |
| neutral |      2 |      2 |      2 |                     1000 |
|    good |      3 |      3 |      3 |                     1000 |

我需要将其转到下面。占据所有列并将它们移动为thr行,但是我需要保留最后一列。

|   FIELD | BAD    | NEUTRAL| GOOD   | FIELDNEEDSTOSTAYASCOLUMN |
|---------|--------|--------|--------|--------------------------|
| FIELD1  |      1 |      1 |      1 |                     1000 |
| FIELD2  |      2 |      2 |      2 |                     1000 |
| FIELD3  |      3 |      3 |      3 |                     1000 |

我曾尝试使用ORacl的PIVOT和UNPIVOT,但无法创建它。

这是sql的小提琴:

http://sqlfiddle.com/#!4/8fb63/10

答案
select  field, bad, neutral, good, fieldneedstostayascolumn
from    mytable
unpivot (val for (field, ord) in (field1 as ('FIELD1', 1), field2 as ('FIELD2', 2),
                                  field3 as ('FIELD3', 3)))
pivot   (min(val) for type in ('bad' as bad, 'neutral' as neutral, 'good' as good))
order   by ord
;



FIELD   BAD NEUTRAL GOOD FIELDNEEDSTOSTAYASCOLUMN
------ ---- ------- ---- ------------------------
FIELD1    1       2    3                     1000
FIELD2    1       2    3                     1000
FIELD3    1       2    3                     1000
另一答案

您去这里

以上是关于Oracle SQL-将列转换为行,同时保留一列的主要内容,如果未能解决你的问题,请参考以下文章

仅当其中一列 = 1 时,如何将列转换为行?

SQL 将列转换为行

oracle sql 11G中如何将列转置为行

oracle如何在没有UNION的情况下将列转置为行

oracle 10g如何将列转换为行

sql 将列数据转换为行