旋转

阅读(243) 标签: 旋转, 列转行, 行转列,

功能:

行列转置。行转列:标题列的值变为新列名,取值列的值变为新列的值。列转行:用逆向参数,原列名变为标题列的值,原列值变为取值列的值。

语法:

旋转 [分组 {[<分组列>] [命名 <新列名>]}] [标题列 <列名>] [取值列 <列名>] [计算方法] [表头 <标题值集合>]

参数:分组

本参数是个复合参数,由参数分组列+命名 <新列名>组成,多组表示多个分组列。

参数:分组列

旋转时要固定不动的单个分组列。必填,省略参数名。

参数:命名 <新列名>

参数分组列旋转后改的新列名。可选,不可省略参数名。缺省保持原列名不变。注意,使用本参数时必须搭配参数分组列。

  示例:

预算表数据如下:

Branch

Dept

State

Amount

branch1

Administration

Florida

28000

branch1

Finance

California

6000

branch2

Finance

Florida

20000

branch2

Finance

New York

11000

branch3

Finance

Texas

11000

branch2

HR

Texas

10000

branch1

Marketing

California

31000

branch1

Marketing

New York

12000

branch2

Marketing

Pennsylvania

10000

branch3

Marketing

Texas

4000

branch1

Production

Florida

15000

branch3

Production

Pennsylvania

10000

branch3

R&D

Pennsylvania

24000

branch2

R&D

Texas

32000

branch1

Sales

California

28000

branch1

Sales

Florida

4000

branch2

Sales

New York

15000

branch3

Sales

Texas

12000

旋转 分组 Branch 命名 分公司, Dept; 标题列 State; 取值列 Amount  //保持Branch、Dept不变,将其他列/组内数据进行行转列,原State的值作为新列的标题,原Amount的值作为新列的值,Branch改名为分公司,结果如下:

分公司

Dept

Florida

California

New York

Texas

Pennsylvania

branch1

Administration

28000

 

 

 

 

branch1

Finance

 

6000

 

 

 

branch1

Marketing

 

31000

12000

 

 

branch1

Production

15000

 

 

 

 

branch1

Sales

4000

28000

 

 

 

branch2

Finance

20000

 

11000

 

 

branch2

HR

 

 

 

10000

 

branch2

Marketing

 

 

 

 

10000

branch2

R&D

 

 

 

32000

 

branch2

Sales

 

 

15000

 

 

branch3

Finance

 

 

 

11000

 

branch3

Marketing

 

 

 

4000

 

branch3

Production

 

 

 

 

10000

branch3

R&D

 

 

 

 

24000

branch3

Sales

 

 

 

12000

 

参数:标题列 <列名>

旋转后,原表中指定单列的值将作为旋转后新列的标题。比如上例脚本中的:标题列 State 。

必填,不可省略参数名。

参数:取值列 <列名>

旋转后,原表中指定单列的值将作为旋转后新列的值。比如上例脚本中的:取值列 Amount 。

必填,不可省略参数名。

参数:计算方法

旋转时的计算方法。

可选,省略参数名;枚举类型,枚举值:合计、计数、平均、最大、最小、逆向。缺省取第一条记录。

其中合计、计数、平均、最大、最小是聚合算法,即行转列旋转后,标题列的一行对应取值列的多个值时,可以通过聚合算出单一值。这种情况一般是因为分组列、标题列、取值列之外还有原表没用到的列。

示例:

旋转 分组 Branch; 标题列 State; 取值列 Amount; 最大  //焦点表为预算表,按Branch分组,将组内记录行转列,State是标题列,Amount是取值列,对Amount取最大值,结果如下:

Branch

Florida

California

New York

Texas

Pennsylvania

branch1

28000

31000

12000

 

 

branch2

20000

 

15000

32000

10000

branch3

 

 

 

12000

24000

解释:因为没用到Dept列,所以旋转后每个取值列对应多个Dept的值,可以通过聚合计算成一个值。

旋转 分组 Branch; 标题列 State; 取值列 Amount  //焦点表为预算表,按Branch分组,将组内记录行转列,State是标题列,Amount是取值列,参数计算方法省略取第一个值。

Branch

Florida

California

New York

Texas

Pennsylvania

branch1

28000

6000

12000

 

 

branch2

20000

 

11000

10000

10000

branch3

 

 

 

11000

10000

旋转 分组 Branch; 标题列 State; 取值列 Amount; 计数  //焦点表为预算表,按Branch分组,将组内记录行转列,State是标题列,Amount是取值列,对Amount计数,结果如下:

Branch

Florida

California

New York

Texas

Pennsylvania

branch1

3

3

1

 

 

branch2

1

 

2

2

1

branch3

 

 

 

3

2

逆向是旋转的逆运算——列转行。其他聚合方法都是行转列,本方法相反:保持分组列不变,把组内的列转为行。原表的列标题变为新标题列的值,原表的列值变为新取值列的值。

成绩表数据:

ClassNew

StuID

English

Math

PE

Class one

1

84

77

69

Class one

2

81

80

97

Class one

3

75

86

67

Class one

4

96

63

81

Class one

5

72

60

91

旋转 分组  ClassNew  StuID; 标题列 SUBJECT; 取值列 SCORE 逆向  //焦点表为成绩表,保持ClassNew、StuID列不变,将其他列进行列转行,原其他列的标题转为新列SUBJECT的值,原其他列的列值转为新列SCORE的值,结果如下:

ClassNew

StuID

SUBJECT

SCORE

Class one

1

English

84

Class one

1

Math

77

Class one

1

PE

69

Class one

2

English

81

Class one

2

Math

80

Class one

2

PE

97

Class one

3

English

75

Class one

3

Math

86

Class one

3

PE

67

Class one

4

English

96

Class one

4

Math

63

Class one

4

PE

81

Class one

5

English

72

Class one

5

Math

60

Class one

5

PE

91

参数:表头 <标题值集合>

旋转后新列标题默认用参数标题列 <列名>的列值自动生成。本参数可指定参与旋转的标题值。

<标题值集合>中每个成员值生成一列,按照集合中的顺序排列,标题值在焦点表中不存在则生成空列,参数中未列出的值不参与旋转也不生成列。

可选,不可省略参数名。

示例:

旋转 分组 Branch, Dept; 标题列 State; 取值列 Amount; 表头 Florida,'New York',Test  //焦点表是预算表, 按Branch、Dept分组,将组内记录行转列,State是标题列,Amount是取值列,Florida,'New York'为表头,Test值在焦点表中不存在旋转后生成空列,State中的其余值不参与旋转也不生成列,结果如下: 

Branch

Dept

Florida

New York

Test

branch1

Administration

28000

 

 

branch1

Finance

 

 

 

branch1

Marketing

 

12000

 

branch1

Production

15000

 

 

branch1

Sales

4000

 

 

branch2

Finance

20000

11000

 

branch2

HR

 

 

 

branch2

Marketing

 

 

 

branch2

R&D

 

 

 

branch2

Sales

 

15000

 

branch3

Finance

 

 

 

branch3

Marketing

 

 

 

branch3

Production

 

 

 

branch3

R&D

 

 

 

branch3

Sales