3

我是 vb.net 的新手,所以请耐心等待。我在 ms access 数据库中有一些可管理的表。我正在尝试编写一个 sql 查询,它将给我以下输出:

表 1(A 列 - B 列)
表2(A列-B列)
表 3(A 列 - B 列)

我在所有表中都有列名“A 列”和“B 列”。

我想检索所有表的表名和(A 列 - B 列)的总和。当我运行 sql 语句时,出现以下错误:

SELECT 语句包含拼写错误或丢失的保留字或参数名称,或者标点符号不正确

有人可以帮我写一个sql查询吗?

这是我的完整代码:

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
4

3 回答 3

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 中正常工作

于 2013-07-03T05:10:55.393 回答
0

选择表 1 作为

该词Table是保留词,因此使用了其他名称。

AndSUM()是一个聚合函数,您需要在其中使用GROUP BY子句。

于 2013-07-03T05:09:39.933 回答
0

您在此 Query2 中犯了错误。不要使用SELECT Table1 AS Table而不是这种使用 select 'Table1' as [table]

于 2013-07-03T05:12:23.550 回答