sql - 如何将 Teradata 中的列值转换为列名?

标签 sql teradata

我有一个表格如下:

Name     Subjects 
X         math 
Y         science
Z         english

我需要以下格式的报告:

  Name      math     science     english
    X         Y         N          N
    Y         N         Y          N
    Z         N         N          Y

如何使用单个选择查询来实现此目的?

最佳答案

这是一个常见问题,搜索“PIVOT 查询”:-)

假设一个Name可以有多个Subject,您需要使用MAX/GROUP BY,否则只需删除聚合即可。

select
   Name,
   max(case when Subjects = 'math' then 'Y' else 'N' end) as Math,
   max(case when Subjects = 'science' then 'Y' else 'N' end) as Science,
   max(case when Subjects = 'english' then 'Y' else 'N' end) as English
from tab
group by Name

关于sql - 如何将 Teradata 中的列值转换为列名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22253965/

相关文章:

mysql - 如何在 MySQL 中使用自定义逻辑 IF 语句比较两列之间的值

sql - 在 Rails 中按虚拟属性排序

sql - 将 float (YYYY) 转换为日期时间

SQL 服务器 : split multiple strings into one row each

sql - Oracle SQL 中的 CASE .. WHEN 表达式

sql - 如何计算层次结构所有级别的总和

java - 使用 'OPE' =? 等语法时,字符串到数字的转换失败

sql - WHERE 语句中的 CASE WHEN

sql - 从 session ID 查找用户名的函数

sql - 拆分字符串 Teradata SQL