暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

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

鲁鲁 2025-03-09
42

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

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论