在teradata sql中完成数据透视

前端之家收集整理的这篇文章主要介绍了在teradata 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)
原文链接:https://www.f2er.com/mssql/83454.html

猜你在找的MsSQL相关文章