2013-02-11 97 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