Oracle SQL 数据透视表从一列变为两列
Posted
技术标签:
【中文标题】Oracle SQL 数据透视表从一列变为两列【英文标题】:Oracle SQL Pivot Table from one column into two columns 【发布时间】:2019-12-31 17:18:55 【问题描述】:我有一个包含两列 PersonId 和 Job 的表,需要根据表中的三个作业将 Job 列转换为多个列。然后,如果 PersonId 与该职位相关联,则每个职位都应在列中显示“是”或“否”。
示例表:
示例输出:
【问题讨论】:
(1) 用您正在使用的数据库标记您的问题。 (2) 解释“动态”标签。 【参考方案1】:使用条件聚合:
select personid,
max(case when job = 'a' then 'yes' else 'no' end) as a,
max(case when job = 'b' then 'yes' else 'no' end) as b,
max(case when job = 'c' then 'yes' else 'no' end) as c
from tablename
group by personid
请参阅demo。 结果:
| personid | a | b | c |
| -------- | --- | --- | --- |
| 1 | yes | yes | no |
| 2 | yes | no | no |
| 3 | no | no | yes |
【讨论】:
感谢您的建议!你知道为什么我在运行它时可能会收到错误“FROM 关键字未在预期的地方找到”吗?这是我正在使用的以下代码:选择 emplid, max(case when acad_career = 'UGRD' then 'yes' else 'no' end) as 'UGRD', max(case when acad_career = 'GRAD' then 'yes' else 'no' end) as 'GRAD', max(case when acad_career = 'CERT' then 'yes' else 'no' end) as 'CERT' FROM (select distinct emplid, acad_career from sysadm.adtl) group by emplid跨度> 这是一个 Oracle 错误。检查编辑的演示链接。 删除别名 UGRD、GRAD 和 CERT 周围的单引号。 这就是问题所在,删除它们后它起作用了。谢谢!以上是关于Oracle SQL 数据透视表从一列变为两列的主要内容,如果未能解决你的问题,请参考以下文章