【问题标题】:SQL Select statement from mutiple tables to fill datagridviewSQL Select语句从多个表中填充datagridview
【发布时间】:2021-04-16 02:35:26
【问题描述】:

我有多个表,表本身以它们的创建日期命名;例如 2021 年 4 月 1 日、2021 年 5 月 1 日等

这些表包含所有相同的列。

但我想创建一个 SQL 语句,允许我返回在两个日期之间创建的所有表,并用这些表中的所有记录填充 Datagridview。

理想情况下,我想要一个“上周创建”、“本周创建”、“本月创建”选项。我可以计算出开始日期和结束日期的语法。但我不确定返回日期之间的表格的正确方法是什么。

我查看了一些示例,但似乎没有一个对我有用,或者正是我所追求的。不确定我是否可以使用 sys.tables 或者我是否需要使用内部联接/左联接等来使其工作。

我的表格在Acccess.MDB 文件中。

【问题讨论】:

  • stackoverflow.com/questions/201282/… 然后循环将表名拼接到 SELECT * sql 语句的连接部分中。哪个连接取决于您选择如何处理丢失的数据。例如:SELECT * FROM 4/01/2021 INNER JOIN 5/01/2021 ON ...
  • 真的应该是1个表,另外一个字段用于标识每组记录,可以是创建日期。那将是一个标准化的结构。那么 CROSSTAB 查询是透视数据的一种方法。否则,连接表需要一个主数据集,其中包含需要链接的公共标识符的所有可能值。
  • 不幸的是,保存的查询对象不能动态包含表/字段。在 VBA 中,可以使用 QueryDefs 修改已保存的查询或构建 SQL 语句来设置报表的 RecordSource。不知道如何在 VB.net、C# 或任何你的前端编码中完成。

标签: sql ms-access datagridview oledb


【解决方案1】:

您将需要一个联合查询

Use a union query to combine multiple queries into a single result

但是,由于包含的表会有所不同,因此您必须动态创建查询的 SQL,然后调用查询来填充您的 datagridview。

注意:这是一个糟糕的设置。您应该尽快并按照@June7 的建议,将您的架构更改为只有一个表,其中的字段包含您的日期(您当前的表名)。

【讨论】:

  • 干杯,我刚刚开始着手做我想做的事情。所以我并不太深入。所以我可以改变表和数据库的结构。谢谢你的想法。
  • 我似乎遇到了一个新问题。我无法让包含日期的 SQL 查询工作。我的日期是 dd/mm/yyyy 格式。我正在尝试做select * from Returnstoaction where purchase_date = ("10/01/2021")
  • 日期表达式使用 octothorpes 并使用 ISO 序列表示年-月-日:select * from Returnstoaction where purchase_date = #2021/01/10#
  • 谢谢,这对我有帮助,我终于工作了,让它以正确的方式工作。
猜你喜欢
  • 1970-01-01
  • 2016-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多