这是我在这个社区的第一个问题。它以前对我有很大帮助,所以谢谢大家的光临!
我对 ORACLE PLSQL 有疑问,我正在尝试创建一个数据透视表来计算给定工资范围内的人数。我希望城市作为行,salary_range 作为列。我的问题是当我为数据透视表选择列别名时。
在表 AI 中有所有员工的行及其工资,在表 B 中,我有他们的城市。它们都由一个名为 id_dpto 的键列链接。首先,我加入两个表,选择员工姓名、薪水和城市。其次,我CASE WHEN用来创建薪水范围(小于 1000 美元和介于 1000 到 2500 美元之间)并为其指定列 alias SALARY_RANGE。到这里为止,一切正常,代码运行完美。
我的问题在第三步。我使用子查询和 PIVOT 命令创建要按城市和薪金范围计数的数据透视表,但是当我在别名中使用 select 命令时它不起作用,我的错误消息是"'F'.'SALARY_RANGE' INVALID IDENTIFYER". 您能帮我在数据透视表中选择创建的列(salary_range)的正确方法是什么吗?我都试过了,在 from 和没有它之后都有 F。
初始数据库
| Name | salary | city |
| ---- | ------ | ------ |
|john | 999 | NY |
|adam | 500 | NY |
|linda | 1500 | NY |
|Matt | 2000 | London |
|Joel | 1500 | London |
期望的结果:
| 城市 | 工资低于1000 | 工资在1000到2500之间 |
|---|---|---|
| 纽约 | 2 | 1 |
| 伦敦 | 0 | 2 |
我的代码:
SELECT F.SALARY_RANGE, F.CITY
FROM (SELECT A.NAMES,
A.SALARY,
C.CITY,
CASE
WHEN SALARY < 1000 THEN 'LESS THAN 1000'
WHEN SALARY < 2500 THEN 'BETWEEN 1000 AND 2500'
END AS SALARY_RANGE FROM EMPLOYEES A
LEFT JOIN XXX B ON A.ID_DPTO = B.ID_DPTO) F
PIVOT
(COUNT(SALARY_RANGE)
FOR SALARY_RANGE IN ('LESS THAN 1000', 'BETWEEN 1000 AND 2500')
)
谢谢你帮助我!