加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

在teradata sql中完成数据透视

发布时间:2020-12-12 16:26:06 所属栏目:MsSql教程 来源:网络整理
导读:假设我有一个返回如下值的查询: id type valueaaa 1a 10aaa 1b 20aaa 1c 7bbb 2a 10bbb 1a 5 有 5000万行和240种可能的“类型”.我想创建一个枢轴,每个id都有一行,每个类型都是它自己的列: id 1a 1b 1c 2aaaa 10 20 7 bbb 5 10 我可以在SQL服务器中执行此操
假设我有一个返回如下值的查询:
id    type     value
aaa   1a        10
aaa   1b        20
aaa   1c        7
bbb   2a        10
bbb   1a        5

有> 5000万行和240种可能的“类型”.我想创建一个枢轴,每个id都有一行,每个类型都是它自己的列:

id   1a   1b   1c   2a
aaa  10   20   7    
bbb  5              10

我可以在SQL服务器中执行此操作,但我不知道如何在Teradata中执行此操作.制作CASE语句的列数太多了.但是,每个不同的类型都在表字段中,如果有任何帮助的话.

解决方法

Teradata SQL中没有透视功能.这里回答了类似的问题 – teradata sql pivot multiple occurrences into additional columns.

为了最好地实现您想要的而不必手动写出250个案例,您应该在某种循环或集合中使用有序分析函数.尝试从Teradata Developer Exchange – http://developer.teradata.com/tag/loop搜索“loop”标签

以下是我将如何做到这一点:使用另一种编程语言(Python)来重复文本/预制SQL并将其改为仅两个变量250次,从1到250,并生成完整的长sql.只重复SELECT DISTINCT id和last FROM mytable行之间的部分:

SELECT DISTINCT
id
-- reiteration starts here,(SELECT SUM(value) -- assuming you have unique types for every id
  FROM (SELECT DISTINCT
    id,value,type
    FROM mytable
    QUALIFY (RANK() OVER(PARTITION BY type ORDER BY id ASC))=1 -- variable 1
    )
) AS type_1 -- variable 2
-- reiteration ends here
FROM mytable

你可以使用这个python:

for i in range(1,251):
    print " ,(SELECT SUM(value) -- assuming you have unique types for every id 
FROM (SELECT DISTINCT 
id ,value ,type 
FROM mytable 
QUALIFY (RANK() OVER(PARTITION BY type ORDER BY id ASC))=%d -- variable 1 
) 
) AS type_%d -- variable 2 
" % (i,i)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读