2013-02-11 64 views
-4

此查询没有显示任何内容。我只想要那些在子查询中匹配的ORDERNO结果。没有一个组功能

SELECT SUM(STY.NQTY * STY.NUNITPRICE 
      /1000) AS ORDERAMOUNT, 
    (SELECT SUM(TBLORDERSTYLE.NQTY * TBLORDERSTYLE.NUNITPRICE/1000) FROM TBLORDER 
    INNER JOIN TBLORDERSTYLE 
    ON TBLORDER.CORDERNO = TBLORDERSTYLE.CORDERNO 
    WHERE TBLORDER.CLCNO LIKE '%MR#%' AND 
    TBLORDER.CORDERNO = ORD.CORDERNO 
    GROUP BY ORD.CORDERNO) AS K 
      FROM TBLORDER ORD INNER JOIN 
      TBLORDERSTYLE STY ON  
      ORD.CORDERNO = STY.CORDERNO 
      where (ORD.NPOSTFLAG = '1') AND 
      (ORD.NCANCEL = '0') AND 
    ORD.NPAYMODE = '1' AND 
      (ORD.DPICONFIRMDATE BETWEEN  
      TO_DATE('01-JUL-2012')AND TO_DATE('31-JUL-2012')) 
+3

请关掉你的大锁,我们不喜欢人们在这里大喊大叫。 – Mat 2013-02-11 08:59:55

+0

垫 - 你有代表编辑帖子,为什么不这样做? – APC 2013-02-11 09:57:34

+2

而不是给我们你的不工作的SQL,请提供相关表格中的示例数据和所需输出的示例。 – DazzaL 2013-02-11 10:43:56

回答

1

错误消息非常明确:您没有GROUP BY子句。每当我们将聚合函数(如SUM()与非聚合列混合使用时,我们需要将静态列包含在GROUP BY子句中。

在你的代码中,静态列是K。是的,它是从一个聚合中派生出来的,但是它在一个子查询中,因此它被视为一个非聚合列。

解决问题的方法是将子查询移动到一个公用表表达式中(Oracle称之为子查询因子分析),这使得不止一次引用列变得容易。 Oracle SQL参考中介绍了WITH Cluase的使用。 Find out more

with cte as (SELECT ORD.CORDERNO 
        , SUM(TBLORDERSTYLE.NQTY * TBLORDERSTYLE.NUNITPRICE/1000) as k 
    FROM TBLORDER 
    INNER JOIN TBLORDERSTYLE 
    ON TBLORDER.CORDERNO = TBLORDERSTYLE.CORDERNO 
    WHERE TBLORDER.CLCNO LIKE '%MR#%' AND 
    TBLORDER.CORDERNO = ORD.CORDERNO 
    GROUP BY ORD.CORDERNO) 
SELECT SUM(STY.NQTY * STY.NUNITPRICE 
      /1000) AS ORDERAMOUNT, 
     cte.K 
      FROM cte inner join 
      TBLORDER ORD on ord.orderno = k.orderno 
      INNER JOIN TBLORDERSTYLE STY ON STY.CORDERNO = k.orderno 
      where (ORD.NPOSTFLAG = '1') AND 
      (ORD.NCANCEL = '0') AND 
      ORD.NPAYMODE = '1' AND 
      (ORD.DPICONFIRMDATE BETWEEN TO_DATE('01-JUL-2012')AND TO_DATE('31-JUL-2012')) 
group by cte.k 

这很可能不是您需要的实际逻辑。您没有包含任何关于您要实现的业务规则的解释,所以我只是猜测如何使用主查询来加入子查询。

+0

什么错误?我们不是心灵感应,所以如果你不给我们有用和详细的信息,我们不能帮你。 – APC 2013-02-11 10:21:45

+0

不要编辑我的答案,编辑*你的问题*。并告诉我们你得到了什么错误。 – APC 2013-02-11 10:45:56

+0

我编辑了你的答案,它给出了第13行的错误我想匹配corderno与子查询的corderno。 – user970906 2013-02-11 10:49:05