Sql 使用表别名时Oracle标识符无效
我有一个使用with语句创建两个别名表的查询:Sql 使用表别名时Oracle标识符无效,sql,oracle,Sql,Oracle,我有一个使用with语句创建两个别名表的查询: WITH Rev AS (SELECT * FROM FORECAST.REVENUE_SUMMARY WHERE FORECAST.REVENUE_SUMMARY.FEE_CD_ACT_SUM_ACCTG_DA >= to_date('10/01/2013', 'mm/dd/yyyy') AND FORECAST.REVENUE_SUMMARY.FEE_CD_ACT_SUM_ACCTG_DA < to_date('1
WITH Rev AS
(SELECT *
FROM FORECAST.REVENUE_SUMMARY
WHERE FORECAST.REVENUE_SUMMARY.FEE_CD_ACT_SUM_ACCTG_DA >= to_date('10/01/2013', 'mm/dd/yyyy')
AND FORECAST.REVENUE_SUMMARY.FEE_CD_ACT_SUM_ACCTG_DA < to_date('10/01/2014', 'mm/dd/yyyy')
),
Mon_pv as
(select to_char(FEE_CD_ACT_SUM_ACCTG_DA, 'MON') as "Mon",
Fee_CD,
Fee_NM,
SUM(CASH_DAILY_CL) as "Collections"
from Rev
group by to_char(FEE_CD_ACT_SUM_ACCTG_DA, 'MON'),
Fee_CD,
Fee_NM
)
select distinct Mon
from Mon_pv
;
在Mon_pv表中,Mon只是一个派生的月份列。因此,在最后一个查询中,我只想选择一个不同月份名称的列表,但它给了我一个错误,即Mon是无效标识符。最终,我希望能够在透视表中使用它来创建月份名称以外的列。但是任何使用Mon作为列的查询都会抛出错误。但当我使用Select*from Mon_pv时,Mon显示为一列。当我在最后的Select语句中特别提到列名时,为什么会抛出错误?正如注释中已经提到的:Mon和Mon不是同一个标识符。当您将标识符放在双引号中时,它会区分大小写,并且允许使用更多种类的字符。如果不使用双引号,名称将自动转换为大写。因此,Mon、Mon和Mon都被读取为Mon,但Mon不是。是否尝试更改别名?如果在查询的最后一部分也对Mon应用双引号会怎么样?否,也没有尝试过。但在最后一个select语句中,将列名加引号是有效的。我从来没有想过我可能必须这么做。Mon与Mon是不同的标识符。有关详细信息,请参阅手册: