【发布时间】:2015-11-11 15:10:14
【问题描述】:
我有一张如下表格的表格
chain |branch
________|________|
a |UK
a |US
b |ISRAEL
b |UK
b |FRANCE
b |BELGIUM
c |NIGERIA
我想按以下格式创建一个新表
chain |branch_1|branch_2|branch_3|branch_4
________|________|________|________|________|
a | UK | US |--------|--------|
b | ISRAEL| UK | FRANCE |BELGIUM |
c | NIGERIA|--------|--------|--------|
为了进一步澄清,假设您可以通过(链)进行分组,其中聚合函数是标识,以便
group_1->(element1,element2,element3,..,elementM)
group_2->(element1,element2,element3,..,elementN)
...
group_X->(element1,element2,element3,..,elementZ)
因此将创建一个新表,其中包含 R+K 列,其中 R 是我们分组的列数(在我们的例子中是列“链”,所以 R=1),K 是组的最大计数(在我们的例子中是四个,对应于链'b')
我确信这一定是一个常见问题,所以如果之前已经回答过这个问题,我深表歉意,但我找不到任何东西。
编辑: 这不是数据透视表 在这种情况下,数据透视表将是
chain |UK |US |ISRAEL |FRANCE |BELGIUM |NIGERIA |
________|________|________|________|________|________|________|
____a___|____1___|____1___|____0___|____0___|____0___|____0___|
____b___|____1___|____0___|____1___|____1___|____1___|____0___|
____c___|____0___|____0___|____0___|____0___|____0___|____1___|
谢谢!
【问题讨论】:
-
它不是数据透视表。数据透视表的单元格值是列,我们不这样做
-
当然是数据透视表,遗憾的是 Teradata 不支持 PIVOT 功能。但是要获得未知数量的列的结果,您总是需要在存储过程中使用一些动态 SQL 来动态创建所需的 SQL....
-
如果我错了,请纠正我,但“传统”数据透视表在每个新列中都有组中包含的唯一值之一,因此在我们的例子中,新列将是 UK,US ,ISRAEL,FRANCE,BELGIUM,NIGERIA,而这些列中的每一列中的值将对应于第三个初始列上的聚合函数,例如 sum、mean、var 或我们喜欢的任何函数。
-
与数据透视表的逻辑相同 :-) 顺便说一句,为什么要创建非规范化表?