SQL ORACLE 取消透视
Posted
技术标签:
【中文标题】SQL ORACLE 取消透视【英文标题】:SQL ORACLE UNPIVOT 【发布时间】:2020-03-31 13:54:42 【问题描述】:我无法处理这个 unpivot。
select *
from (select c.country_id, r.region_id, count(*) liczba
from countries c join regions r on r.region_id = c.region_id
group by c.country_id, r.region_id)
UnPivot(
count(liczba) for r.region_id in (any))
order by c.country_id
这是代码,但仍然无法正常工作:(
select r.region_name, count(*)
from countries c join regions r on r.region_id = c.region_id
group by r.region_name
这个工作正常。
“无效标识符”
二次想象!
【问题讨论】:
请提供样本数据和期望的结果,以便清楚您想要完成什么。 您还没有告诉我们什么不起作用 - 请在问题中包含您遇到的错误。any
关键字仅适用于 XML 数据透视表,因此您可能正在尝试做一些普通静态 SQL 无法做到的事情,但目前还不清楚。 (你的内部查询中的count(*)
也不总是1?)
好的,如果你可以再看一遍帖子
当我使用普通数据时,没有任何它不起作用
请不要发布代码或数据的图像;不确定这些显示的是什么,因为它们不是您的查询引用的表。您发布的 unpivot 查询似乎得到 ORA-00905 缺少关键字,而不是 ORA-00904 无效标识符。请包括示例数据、您的实际查询以及您尝试实现的输出。
【参考方案1】:
您的查询没有意义:
UNPIVOT
用于将列转置为行;您只有 3 列 country_id
、region_id
和 liczba
。
UNPIVOT
语法是:
UNPIVOT ( value FOR key IN ( column1 AS 'alias1', column2 AS 'alias2' ) )
您不能将聚合表达式作为值。
您需要指定UNPIVOT
ing 到行的列;除非您定义了一个名为 any
的列,否则您不能使用 any
。
您似乎想使用PIVOT
而不是UNPIVOT
。
我想看看,每个job_id有多少人工作
使用GROUP BY
和COUNT
:
SELECT job_id,
COUNT(DISTINCT EMPLOYEE_ID) AS number_of_employees
FROM employees
GROUP BY job_id
使用反透视
这不是UNPIVOT
的用途; UNPIVOT
将列转换为行,而您希望将行聚合在一起。
【讨论】:
好的,知道了。所以,如果我想看看,每个job_id有多少人工作,我应该怎么做? (帖子中的图片)以上是关于SQL ORACLE 取消透视的主要内容,如果未能解决你的问题,请参考以下文章