---
source_url: https://docs.dolphindb.cn/zh/funcs/u/unpivot.html
fetched_at: 2026-05-19T09:43:12Z
category: funcs
title: unpivot
sha1: cbbbbba69c76746b3e7a2966b3afa23e0f9415b1
---

# unpivot

## 语法

`unpivot(obj, keyColNames, valueColNames, [func])`

## 详情

把多列的数据转换成一列。

## 参数

**obj** 是一个表。

**keyColNames** 是表示列名的标量或向量，用于指定要在输出表中保留的列。

**valueColNames** 是一个列名向量。*valueColNames* 中的数据将转换成一列。 请注意
*valueColNames* 各列的数据类型应一致。

**func** 是一个函数。如果指定了 *func* 函数，该函数将会应用到 *valueColNames* 上，再将其合并。

## 返回值

返回一个表，列的顺序依次为 *keyColNames* 指定的各列，valueType 列和 value
列。其中，若未指定 *func* 参数，则 valueType 列存储 *valueColNames* 中的列名，否则 ，valueType 列存储
*func* 应用于 *valueColNames* 中各列的结果；value 列存储 *valueColNames*
中各列的值。

## 例子

```dolphindb
t=table(1..3 as id, 2010.01.01 + 1..3 as time, 4..6 as col1, 7..9 as col2, 10..12 as col3, `aaa`bbb`ccc as col4, `ddd`eee`fff as col5, 'a' 'b' 'c' as col6);
t;
```

| id | time | col1 | col2 | col3 | col4 | col5 | col6 |
| --- | --- | --- | --- | --- | --- | --- | --- |
| 1 | 2010.01.02 | 4 | 7 | 10 | aaa | ddd | 'a' |
| 2 | 2010.01.03 | 5 | 8 | 11 | bbb | eee | 'b' |
| 3 | 2010.01.04 | 6 | 9 | 12 | ccc | fff | 'c' |

保留表 t 中的 id 列，将 col1 列和 col2 列转换为一列：

```dolphindb
t.unpivot(keyColNames=`id, valueColNames=`col1`col2);
```

| id | valueType | value |
| --- | --- | --- |
| 1 | col1 | 4 |
| 2 | col1 | 5 |
| 3 | col1 | 6 |
| 1 | col2 | 7 |
| 2 | col2 | 8 |
| 3 | col2 | 9 |

保留表 t 中的 id 列，将 col1 列和 col2 列转换为一列，且将自定义函数应用于 col1 列和 col2 列：

```dolphindb
f = def(x): x.split("col")[1];
t.unpivot(keyColNames=`id, valueColNames=`col1`col2, func=f);
```

| id | valueType | value |
| --- | --- | --- |
| 1 | 1 | 4 |
| 2 | 1 | 5 |
| 3 | 1 | 6 |
| 1 | 2 | 7 |
| 2 | 2 | 8 |
| 3 | 2 | 9 |

不保留其它列，仅仅将 col1 列和 col2 列转换为一列：

```dolphindb
t.unpivot(, valueColNames=`col1`col2);
```

| valueType | value |
| --- | --- |
| col1 | 4 |
| col1 | 5 |
| col1 | 6 |
| col2 | 7 |
| col2 | 8 |
| col2 | 9 |

保留表 t 中的 id 列，将 col1 列、col2 列 和 col3 列转换为一列，且将自定义函数应用于 col1 列、col2 列和 col3 列：

```dolphindb
f = def(x): x.regexReplace("col", "var")
t.unpivot(keyColNames=`id, valueColNames=`col1`col2`col3, func=f);
```

| id | valueType | value |
| --- | --- | --- |
| 1 | var1 | 4 |
| 2 | var1 | 5 |
| 3 | var1 | 6 |
| 1 | var2 | 7 |
| 2 | var2 | 8 |
| 3 | var2 | 9 |
| 1 | var3 | 10 |
| 2 | var3 | 11 |
| 3 | var3 | 12 |

```dolphindb
t.unpivot(keyColNames=`time, valueColNames=`col4`col5)
```

| time | valueType | value |
| --- | --- | --- |
| 2010.01.02 | col4 | aaa |
| 2010.01.03 | col4 | bbb |
| 2010.01.04 | col4 | ccc |
| 2010.01.02 | col5 | ddd |
| 2010.01.03 | col5 | eee |
| 2010.01.04 | col5 | fff |

```dolphindb
t = table(1..3 as id, 2010.01.01 + 1..3 as time, 8.1 9.2 11.3 as bid1, 12.4 11.1 10.5 as bid2, 10.1 10.2 10.3 as bid3, 10.1 10.2 10.3 as bid4, 10.1 11.2 9.3 as bid5, 7.7 8.2 10.5 as ask1, 11.4 10.1 9.5 as ask2, 9.6 9.2 11.3 as ask3, 12.1 7.2 8.3 as ask4, 10.1 12.5 8.9 as ask5);
t;
//保留 id 和 time 列，将 bid1~bid5 列转换到一个列
t1 = t.unpivot(`id`time, `bid1`bid2`bid3`bid4`bid5);
//不保留其它列，仅仅将 ask1~ask5 列转换到一个列
t2 = t.unpivot(, `ask1`ask2`ask3`ask4`ask5);
//分别将 t1 和 t2 的 valueType 和 value 列重命名后进行合并
re = rename!(t1, `valueType`value, `bid_type`bid_value) join rename!(t2, `valueType`value, `ask_type`ask_value)
re;
```

| id | time | bid\_type | bid\_value | ask\_type | ask\_value |
| --- | --- | --- | --- | --- | --- |
| 1 | 2010.01.02 | bid1 | 8.1 | ask1 | 8.1 |
| 2 | 2010.01.03 | bid1 | 9.2 | ask1 | 9.2 |
| 3 | 2010.01.04 | bid1 | 11.3 | ask1 | 11.3 |
| 1 | 2010.01.02 | bid2 | 12.4 | ask2 | 12.4 |
| 2 | 2010.01.03 | bid2 | 11.1 | ask2 | 11.1 |
| 3 | 2010.01.04 | bid2 | 10.5 | ask2 | 10.5 |
| 1 | 2010.01.02 | bid3 | 10.1 | ask3 | 10.1 |
| 2 | 2010.01.03 | bid3 | 10.2 | ask3 | 10.2 |
| 3 | 2010.01.04 | bid3 | 10.3 | ask3 | 10.3 |
| 1 | 2010.01.02 | bid4 | 10.1 | ask4 | 10.1 |
| 2 | 2010.01.03 | bid4 | 10.2 | ask4 | 10.2 |
| 3 | 2010.01.04 | bid4 | 10.3 | ask4 | 10.3 |
| 1 | 2010.01.02 | bid5 | 10.1 | ask5 | 10.1 |
| 2 | 2010.01.03 | bid5 | 11.2 | ask5 | 11.2 |
| 3 | 2010.01.04 | bid5 | 9.3 | ask5 | 9.3 |
