【问题标题】:SQL UNION ALL problem after using UNION ALL more than 10 times使用 UNION ALL 超过 10 次后的 SQL UNION ALL 问题
【发布时间】:2011-01-24 05:18:34
【问题描述】:

如果我在 VBA 代码中使用超过 10 个 UNION ALL 语句,则会出现格式问题。

如果我使用 10 或更少,一切都会很好。

我想做的是合并 12 个工作表 (Excel 2007)。

如果我有超过 10 个 UNION ALL,我有一个名为 SC 的数字列,它会变成字符串和日期。如果我尝试使用超过 10 个 UNION ALL 的 ROUND,我最后的选择会将所有记录更改一个单位。

我使用 Microsoft.ACE.OLEDB.12.0 作为我的提供程序,并且到目前为止,我的连接字符串已在我的代码中用于几件事。

使用 OLEDB 时 UNION ALL 语句有限制吗?

这是我的代码。

Dim StrOr As String
Dim i As Variant
Dim Cnt As ADODB.Connection
Dim Rs As ADODB.Recordset

For i = 1 To 12
    StrOr = StrOr & " " & "SELECT SC FROM [" & MonthName(i, True) & "$" & "] UNION ALL"
Next

StrOr = Left(StrOr, Len(StrOr) - 9) & ";"

Call GetADOCnt

Call ADORs

【问题讨论】:

  • 你想用这个记录集做什么?
  • Set Rcst = New ADODB.Recordset Rs.Open SQlString, Cn
  • 是的,但是您打算如何处理记录集?将其附加到数据透视表、图表或循环上?
  • 现在我只是将合并的表复制到另一个表。我的目标是按合并表进行分组,但我什至无法达到这一点,因为我的记录集有这个格式问题。如果我尝试,我会收到 GROUP BY 的数据类型不匹配错误(如果我有 10 个或更少的 UNION ALL,我不会收到任何错误)。
  • 根据您的描述,我相信您的工作表之间的单元格格式有问题。这通常是 Excel 数据的问题。您看到的是格式化的值。该命令试图“联合”不同的数据类型并且失败了。有时您可以通过更改受影响单元格的格式来解决此问题。有时,您必须“复制”和“粘贴特殊 -> 值”才能使其正常工作。

标签: sql vba oledb ms-access-2007 excel-2007


【解决方案1】:

如果您要附加 12 个工作表的 UNION,为什么不使用循环一次附加每个工作表?您显然不需要重复数据删除(您正在使用 UNION ALL),因此这似乎是避免 UNION 记录集发生任何问题的明显解决方案。

【讨论】:

  • 我也在想同样的事情,但我相信他们也应该 GROUP BY。
  • 我对此有不同的解释:“我只是将合并的表复制到另一个表。我的目标是按合并的表进行分组”。这似乎是在追加之后说 GROUP BY,但你可能是对的,他试图一口气做到这一点。如果 UNION 不起作用,也许他可以使用临时表作为 GROUP BY 源。但最终,如果您对错误原因的猜测是正确的,即使逐个附加也会遇到错误,并且更改为该方法将更容易诊断出哪个电子表格是问题子并单独解决它.
  • 是的,我正在尝试合并所有表格以在此之后进行分组。
  • 如果您在表上而不是在 UNION SQL 上执行 GROUP BY,则更改为一次附加一个工作表应该可以帮助您解决问题,而根本不会更改结果。
  • 我怎样才能一次追加一个工作表,然后进行 GROUP BY?
猜你喜欢
  • 1970-01-01
  • 2013-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多