在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) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |