2013-07-03 70 views
3

我是vb.net的新手,所以請耐心等待。我在ms access數據庫中有一些可管理的表。我想寫一個SQL查詢,這將使我以下的輸出:vb.net和sql查詢

 
table1 (columnA - columnB) 
table2 (columnA - columnB) 
table3 (columnA - columnB) 

我有列名「列A」和「B柱」中的所有表

我想檢索表名和(A列 - 列B)的總和所有表的。當我運行SQL語句,我得到以下錯誤:

The SELECT statement includes a reserved word or an argument name that is misspelled or missing, or the punctuation is incorrect

有人可以幫我寫一個SQL查詢請

這裏是我的F ULL代碼:

Dim con As New OleDbConnection(" Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\msacc.accdb") 

Dim Query2 As String = " SELECT Table1 AS Table, SUM(a) - SUM(b) AS Result FROM table1 UNION SELECT Table2, SUM(a) - SUM(b) FROM table2 UNION SELECT Table3, SUM(a) - SUM(b) FROM table3" 
Dim Da As OleDbDataAdapter, Ds As New DataSet, Dtb As New System.Data.DataTable 
con.Open() 
Da = New OleDbDataAdapter(Query2, con) 
Da.Fill(Ds) 
con.Close() 
Dtb = Ds.Tables(0) 
DataGridView1.DataSource = Dtb 

回答

0

選擇Table AS

Table是保留字,以便使用其它名稱。

SUM()是一個集合函數,其中您需要使用GROUP BY子句。

+2

如果您是由另一個字段分組,則只需要GROUP BY。 –

+0

@CraigT我最初想的是他使用的'Table1'是一個保證GROUP BY的字段,直到我意識到他正在使用一個常量值。 – Edper

4

如果正確理解,你可能找身邊字符串字面此

  1. 使用引號('Table1'Table2'Table3'
  2. 使用括號[]周圍的別名是一個保留字([Table]
  3. 使用UNION ALL而不是UNION,因爲您不需要消除結果集中的任何重複項
SELECT 'Table1' AS [Table], SUM(a) - SUM(b) AS Result 
    FROM table1 
UNION ALL 
SELECT 'Table2', SUM(a) - SUM(b) 
    FROM table2 
UNION ALL 
SELECT 'Table3', SUM(a) - SUM(b) 
    FROM table3 

這裏是SQLFiddle演示(SQL Server)的查詢本身將在MS Access就好

+1

無論如何,他所說的錯誤可能是因爲使用「表」作爲保留字的名稱。你應該使用它@Dinup說:'[Table]' – SysDragon

+0

@rony它有幫助嗎? – peterm

0

你有這個QUERY2做錯誤的工作。不要使用SELECT Table1 AS Table而不是使用select 'Table1' as [table]