【问题标题】:vb.net and sql queryvb.net 和 sql 查询
【发布时间】:2013-06-30 16:09:31
【问题描述】:

我是 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

【问题讨论】:

    标签: sql vb.net ms-access


    【解决方案1】:

    如果理解正确,您可能正在寻找这个

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

    【讨论】:

    • 无论如何,他所说的错误可能是因为使用Table作为保留字的名称。你应该像@Dinup 所说的那样使用它:[Table]
    【解决方案2】:

    你在这个 Query2 中做错了。不要使用SELECT Table1 AS Table 而不是这个使用select 'Table1' as [table]

    【讨论】:

      【解决方案3】:

      选择表 1 作为

      Table 这个词是保留字,所以使用了其他名称。

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

      【讨论】:

      • 如果你是按另一个字段分组,你只需要一个 GROUP BY。
      • @CraigT 我最初认为他使用的“Table1”是一个需要 GROUP BY 的字段,直到我意识到他使用的是常量值。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-16
      • 1970-01-01
      • 2018-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多