2013-04-25 115 views
0

給出彙總函數錯誤的SQL查詢對不起,下面粘貼了整個BIG查詢。我已經一遍又一遍地檢查了可能存在計算錯誤的地方,比如除以零,但沒有任何工作。現在它要求我使用group by子句,就像我們在select語句中計數時得到的錯誤,並且不使用group by子句。但是,當我在列表中列出所有列的情況下將group by子句放在列表中時,它會告訴我列名不存在!甚至當我沒有使用任何

+0

我確實使用了別名。我錯過了嗎? – camelbrush 2013-04-25 18:16:16

+3

@stevenackley你在說什麼?您可以在'ORDER BY'中使用別名,但不能在'GROUP BY'中使用別名。你試過了嗎? – 2013-04-25 18:16:52

+1

@stevenackley實際上這是另一種方式。您*不能*在GROUP BY中使用列別名,您只能使用源表中的列名(這意味着您必須複製表達式才能對輸出列值進行分組)。實際上,這可能是OP的問題。 – RBarryYoung 2013-04-25 18:20:59

回答

4

您正在使用您的SQL的45行之和:

(case ((sum(T.act_work_qty)+sum(T.remain_work_qty))*100.0) 
     when 0 then 0 
     when null then 0 
     else round((sum(T.act_work_qty)/(sum(T.act_work_qty)+sum(T.remain_work_qty))*100.0),2) 
    end) 

正因爲如此,SQL假設你有一個聚集查詢,並返回一個錯誤的聚集。

以下是變通辦法的一些建議。 。 。

  1. 也許你不需要總和,所以你可以使用列值。
  2. 您可以使用Windows函數來計算總和。 。 。 sum(T.act_work_qt) over()將計算查詢處理的所有行的總和(應用where子句條件)。
  3. 使用子查詢計算總和。
+0

謝謝戈登。你的建議奏效了。我通過添加另一個執行pct計算的臨時表,在我的OP中更新了我的查詢。 但現在它在其他地方休息說'子查詢返回多個值'! – camelbrush 2013-04-25 18:35:25

+0

@camelbrush。 。 。解決方案是一個聚合函數或'select top 1'。 – 2013-04-25 18:38:08

+0

但top1將始終只返回1條記錄嗎?爲什麼會說subquerry返回的值超過1?我試着評論說阻止了,但同樣的錯誤。無法確定哪個查詢返回多條記錄。我設置了where子句來確保只返回正確的匹配。 :( – camelbrush 2013-04-25 18:53:02

相關問題