2017-10-13 55 views
0

下午好。很高兴发布我不需要发布任何问题,而是开始回答。 Woo :)Oracle SQL - AVG功能无效标识符

无论如何,我的问题在于,我试图编写一个子查询来拉动我的供应商,他们的角色,以及他们的角色。供应商可能多次提供零件,所以我想平均零件的价格。后来,我期待看到有关这些部分的任何问题通知。但是,我不能参考稍后我将进行平均的领域。我该怎么办?

的SQL如下所示,是O​​RACLE语法:

WITH 
PartVendor AS 
(
SELECT PARTNAME, PARTNUM, AVG(PARTPRICE), VENDNAME, VENDNUM 
FROM PARTBL 
    INNER JOIN VENDTBL ON VENDNUM = PARTVENDNUM 
GROUP BY PARTNAME, PARTNUM, VENDNAME, VENDNUM 
), 

PartProbs AS 
(
SELECT PartVendor.*, PROBNUM, PROBDESC 
FROM PartVendor 
    INNER JOIN PROBTBL ON PARTNUM = PROBPARTNUM 
) 

SELECT * 
FROM PartProbs 

稍后,我会做更多。但是我一直在PARTPRICE上发现一个错误,告诉我它是一个无效的标识符。任何人都可以帮忙吗?

+0

我没有看到你的CTE列的列表。 'WITH cte_name(column_list)AS(...)' – Eric

+0

我不知道cte是什么,但我从来没有像以前那样使用WITH,并且我一直在使用它进行子查询一段时间。 @Eric – bm0r3son

+0

你确定你的一个表'PARTBL'和'VENDTBL'有一个'PARTPRICE'列吗?如果是这样,也许它是用双引号声明的,就像在“PartPrice”中那样 - 那么当它被引用时它就被强制称为“PartPrice”? – mathguy

回答

1

您应该为在CTE中的所有列:

WITH PartVendor AS (
     SELECT PARTNAME, PARTNUM, AVG(PARTPRICE) as AVG_PARTPRICE, VENDNAME, VENDNUM 
     FROM PARTBL INNER JOIN 
      VENDTBL ON VENDNUM = PARTVENDNUM 
     GROUP BY PARTNAME, PARTNUM, VENDNAME, VENDNUM 
    ), 
    . . . 
+0

我可以在后面的子查询中引用AVG_PARTPRICE吗? – bm0r3son

+0

我同意你的陈述为“合理的建议”,但它不**解释错误;即使函数调用没有给出别名,语法也是正确的(至少在Oracle中),即使这是一种不好的做法。 – mathguy

+0

@Gordon Linoff它完美的工作,谢谢你!我之前使用双引号来命名别名,这就是为什么当我在外面引用它时不起作用。我真的很感激! – bm0r3son