2015-08-24 87 views
0

时,我有一个创建具有语句使用两个别名表的查询:在Mon_pv表“星期一”只是一个派生月份列甲骨文无效标识使用表的别名

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是一个无效的标识符”。最终,我希望能够在数据透视表中使用它来创建月份名称以外的列。但是,使用“Mon”作为列的任何查询都会引发错误。但是,当我使用从Mon_pv选择*“星期一”出现作为一列。为什么当我在最终的Select语句中专门提到列名时会引发错误?

+1

您是否尝试更改别名? –

+1

如果你在查询的最后部分对''Mon''应用双引号,怎么办? – GolezTrol

+0

没有没有尝试过。但是,在最后一个select语句中将列名放在引号中工作。从来没有想到我可能必须这样做。 – user2907249

回答

0

正如在评论中已经提到的那样:"Mon"Mon不是相同的标识符。当您将标识符放在双引号中时,它将区分大小写(并且还允许更多种类的字符)。当您不使用双引号时,名称会自动转换为大写。所以Mon,MONmon都被读为MON,但是"Mon"不是。