【Teradata SQL】行转列、列转行的简单实现

1.多行转多列

行列转换就是如下图所示两种展示形式的互相转换

(1)使用PIVOT函数

SELECT *
FROM student
PIVOT (
 SUM(score) FOR subject IN (语文, 数学, 英语)
)   #默认按照score和subject以外其它字段进行group by

(2)使用Case When

结果跟上述函数一致,但是当涉及字段较多时,使用case when书写可能不太直观。

SELECT name,
 MAX(
 CASE
 WHEN subject='语文'
 THEN score
 ELSE 0
 END) AS "语文",
 MAX(
 CASE
 WHEN subject='数学'
 THEN score
 ELSE 0
 END) AS "数学",
 MAX(
 CASE
 WHEN subject='英语'
 THEN score
 ELSE 0
 END) AS "英语"
FROM student
GROUP BY name

2.多列转多行

 

(1)使用UNPIVOT函数

SELECT *
FROM student1
UNPIVOT (
  score FOR subject IN ("语文","数学","英语")
)

(2)使用Case When

结果跟上述函数一致,但是当涉及字段较多时,使用case when书写可能不太直观。

SELECT
  NAME,
  '语文' AS subject ,
  MAX("语文") AS score
FROM student1 GROUP BY NAME
UNION
SELECT
  NAME,
  '数学' AS subject ,
  MAX("数学") AS score
FROM student1 GROUP BY NAME
UNION
SELECT
  NAME,
  '英语' AS subject ,
  MAX("英语") AS score
FROM student1 GROUP BY NAME

3.多行转一列

 多行转一列函数TDStats.udfConcat

 

参考文档:

SQL行转列、列转行的简单实现

 

转载于:https://www.cnblogs.com/badboy200800/p/11326086.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值