2014-09-28 46 views
2

[编辑]我被告知查询中有一个子查询,所以这里是我想出了而现在给努力。[NEW CODE]编辑:ORA-00936:缺少表达式编辑[ORA-00933:SQL命令未正确结束]

SELECT P.prodid, P.prodname, SUM(O.qtysold) AS "TOTAL SALES" 
FROM ORDERLINE O 
INNER JOIN PRODUCT P 
ON O.prodid = P.prodid 
INNER JOIN ALLOCATION A 
ON P.prodid = A.prodid 
GROUP BY P.prodid, P.prodname 
HAVING (SELECT AVG(score) AS score 
      FROM QUALITYCHECK 
      HAVING score >= 2) 
ORDER BY 3 ASC; 

[原帖] 所以,我一直在努力做这个代码的方式给我正确的结果。我认为这是如果它工作我最准确的一项:

SELECT P.prodid, P.prodname, SUM(O.qtysold) AS "TOTAL SALES" 
FROM ORDERLINE O 
INNER JOIN PRODUCT P 
ON O.prodid = P.prodid 
INNER JOIN ALLOCATION A 
ON P.prodid = A.prodid 
GROUP BY P.prodid, P.prodname 
WHERE (SELECT AVG(score) FROM QUALITYCHECK) >= 2 
ORDER BY 3 ASC; 

〜错误是线8〜

所以让我解释什么,我试图完成。我试图从Orderline表中获取销售产品的数量,但仅限于产品的质量检查得分平均值大于2的情况。我想尝试做这项工作,但是如果有其他方法可以做到这一点,欢迎所有建议。

我还有另一种方式做它,但它给了我3和15的结果而不是1和5,我会在这里把任何人都可以解决这个问题。

SELECT P.prodid, P.prodname, SUM(O.qtysold) AS "TOTAL SALES" 
FROM ORDERLINE O 
INNER JOIN PRODUCT P 
ON O.prodid = P.prodid 
INNER JOIN ALLOCATION A 
ON P.prodid = A.prodid 
INNER JOIN QUALITYCHECK Q 
ON A.prodid = Q.prodid 
GROUP BY P.prodid, P.prodname 
HAVING AVG(Q.score) >= 2 
ORDER BY 3 ASC; 

在此先感谢:d

+0

的'WHERE'需要去* *前的'组by' – 2014-09-28 09:52:46

回答

0
Try this 

SELECT P.prodid, P.prodname, SUM(O.qtysold) AS "TOTAL SALES" 
FROM ORDERLINE O 
     INNER JOIN PRODUCT P 
     ON O.prodid = P.prodid 
     INNER JOIN ALLOCATION A 
     ON P.prodid = A.prodid 
     INNER JOIN QUALITYCHECK Q 
     ON A.prodid = Q.prodid AND AVG(Q.score) >= 2 
     GROUP BY P.prodid, P.prodname 
ORDER BY 3 ASC; 
+0

这并摆脱错误的,但它并没有不给我有任何结果。选择0行。 – Jacko 2014-09-28 09:54:20

+0

我编辑了查询。你可以检查一下吗? – abc123 2014-09-28 10:28:48

+0

你的新声明给了我这个错误ORA-00934:组函数在这里是不允许的 – Jacko 2014-09-28 10:33:01

0

你的第二个查询似乎值得追求的目标。您收到错误的总和,因为订单行连接的次数太多。

尝试在隔离产品和优质的分组:

SELECT P.prodid, P.prodname, SUM(O.qtysold) AS "TOTAL SALES" 
FROM ORDERLINE O 
INNER JOIN (
    select P.prodid, P.prodname, p.prodid 
    FROM PRODUCT P 
    INNER JOIN QUALITYCHECK Q ON p.prodid = Q.prodid 
    GROUP BY P.prodid, P.prodname, p.prodid 
    HAVING AVG(Q.score) >= 2) P ON O.prodid = P.prodid 
INNER JOIN ALLOCATION A ON P.prodid = A.prodid 
ORDER BY 3 
+0

嘿,我明白你想要做什么,但是这会导致一些错误左右偏右。我想理解我的表格会澄清它 – Jacko 2014-09-28 10:33:40

+0

我有一个字符错误 - 现在就试试。如果它不起作用,告诉我错误消息。另外,如果你想得到适当的帮助,最好使用[SQLFiddle](http://sqlfiddle.com)发布你的表模式, – Bohemian 2014-09-28 15:18:02