2010-07-18 85 views
1

我有這個疑問:我得到錯誤,當我試圖通過C#運行在訪問查詢

SELECT DO3Tbl.CodeDip, DO3Tbl.BarcodeD, Sum(DO3Tbl.Qty) AS Qty, 
     Max(DO3Tbl.Mly) AS Mly, [Qty]-[Mly] AS Tot, ABS(Tot) AS TotAbs 

當我運行在上網本查詢其作品的優秀

但是當我運行在C#此查詢像這樣的代碼:

SQL =  SELECT DO3Tbl.CodeDip, DO3Tbl.BarcodeD, Sum(DO3Tbl.Qty) AS Qty, 
      Max(DO3Tbl.Mly) AS Mly, [Qty]-[Mly] AS Tot, ABS(Tot) AS TotAbs 
Cmd = new OleDbCommand(SQL, Conn); 
      Cmd.ExecuteNonQuery(); 
      Cmd.Dispose(); 

我得到這個錯誤:

You tried to execute a query that does not include the specified expression '[Qty]-[Mly]' as part of an aggregate function.

+1

你可以嘗試把一個'MIN()''左右[數量] - [萬光年]',並查看它是否接受它呢? – stakx 2010-07-18 11:05:42

+0

這不是有效的C#。我錯過了什麼? – 2010-07-18 11:12:15

+0

它不是有效的C#好吧,但顯然它執行,錯誤似乎與SQL(它不承認'Qty'和'Mly'不需要聚合函數),而不是與C#部分。 – stakx 2010-07-18 11:17:03

回答

1

就Access而言,查詢存在很多問題,例如,您不是從任何表中選擇,也不能使用與字段名稱相同的別名。如何:

SELECT DO3Tbl.CodeDip, DO3Tbl.BarcodeD, Sum(DO3Tbl.Qty) AS SumOfQty, Max(DO3Tbl.Mly) AS MaxOfMly, Sum([Qty]-[Mly]) AS Tot, Abs(Tot) AS TotAbs 
FROM DO3Tbl 
GROUP BY DO3Tbl.CodeDip, DO3Tbl.BarcodeD; 
0

我建議,而不是在查詢中直接計數的

Tot and TotAbs

值這一點。

最好在代碼中對它們進行計數,因爲我們能夠避免與SELECT子句中的查詢執行順序相關的任何問題。

因此,您的查詢會是這樣的:

SELECT DO3Tbl.CodeDip, DO3Tbl.BarcodeD, Sum(DO3Tbl.Qty) AS Qty, 
     Max(DO3Tbl.Mly) AS Mly 

乾杯。

相關問題