Oracle SQL:如何为子查询中的数据透视表调用创建的列(别名)

卡洛斯

这是我在这个社区中的第一个问题。之前它对我有很大帮助,所以谢谢大家在这里!

我在ORACLE PLSQL上遇到问题,我试图创建一个数据透视表,该表计算给定薪资范围内的人数。我希望城市作为行,而薪金范围作为列。我的问题是当我为数据透视表选择列别名时。

在表AI中,列出了所有雇员及其工资的行,在表B中,列出了他们的城市。它们都通过名为id_dpto的键列链接。首先,我加入两个表,选择员工姓名,薪水和城市。其次,我使用CASE WHEN创建工资范围(小于1000且在1000到2500美元之间),并为其指定列别名SALARY_RANGE到这里为止,一切正常,代码可以完美运行。

我的问题在第三步。我使用子查询和PIVOT命令创建了按城市和薪金范围进行计数的数据透视表,但是当我在别名中使用select命令时,它不起作用,我的错误消息是"'F'.'SALARY_RANGE' INVALID IDENTIFYER"您能帮我在数据透视表中选择创建的列(salary_range)的正确方法是什么?我已经尝试过这两个,在F后面有F,也没有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')
     )

感谢您的帮助!

谢尔盖·阿菲诺根诺夫(Sergey Afinogenov)

我认为您应该使用*并从子查询中排除SALARY和NAMES:

 SELECT *
  FROM (SELECT B.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'))

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Oracle中的SQL透视查询

来自分类Dev

Oracle SQL自动行到列数据透视表

来自分类Dev

如何使用Oracle SQL汇总/数据透视表

来自分类Dev

Oracle SQL:透视列

来自分类Dev

Oracle数据透视表中的空替换

来自分类Dev

如何在Oracle查询的列别名中包含与号

来自分类Dev

如何在Oracle PLSQL中透视表?

来自分类Dev

如何从oracle中的选择结果创建别名?

来自分类Dev

在Oracle,SQL中创建表

来自分类Dev

在Oracle,SQL中创建表

来自分类Dev

Oracle SQL子查询

来自分类Dev

子查询 SQL Oracle

来自分类Dev

如何在Oracle SQL中使用相同的子查询更新同一表中的多个列

来自分类Dev

在Oracle SQL中将数据透视表转换为平面表

来自分类Dev

在MS ACCESS 2010中创建表-使用Oracle SQL查询

来自分类Dev

SQL 在不使用 Oracle Pivot 子句的情况下创建数据透视表

来自分类Dev

透视Oracle查询

来自分类Dev

Oracle SQL查询以从日志表中获取数据

来自分类Dev

oracle查询中如何对多个数据列进行查询?

来自分类Dev

Oracle:在比较操作中如何使用子查询中的空格引用别名

来自分类Dev

如何为列分配名称-Oracle SQL

来自分类Dev

SQL - Oracle - 带有动态数据的透视表

来自分类Dev

Oracle SQL Developer - 没有聚合功能的数据透视表

来自分类Dev

Oracle中类似查询的复杂数据透视

来自分类Dev

Oracle 11g SQL:数据透视表-可变的列数

来自分类Dev

Oracle 11g SQL:数据透视表-可变的列数

来自分类Dev

带有附加(非聚合)列的 Oracle SQL xml 数据透视表

来自分类Dev

在Oracle SQL中返回多行的子查询

来自分类Dev

在Oracle SQL中创建表时,如何创建包含特定值的列?