通过 Excel VBA 上的查询字符串执行 SQL 过程代码(查询 table 相同的工作簿)

Execute SQL procedure code via query string on Excel VBA (query table same workbook)

SQL 的新手。我正在尝试通过 excel VBA 通过查询字符串执行 SQL 代码,以测试来自存储在 sheet 中的 table 的动态数据透视查询工作簿。普通查询运行良好 (SELECT),但 SQL 语句却不行。

我收到 Invalid SQL statement expected; 'DELETE','INSERT'... 一次又一次的错误

我想要实现的是一个 sql 查询来检索动态数据透视表(行到可变列)。我不想用 pivot tables 来实现这个我想用 VBA.

的 SQL 字符串查询来实现

Sample data

如何做到这一点?

    On Error GoTo ErrorConexion
    objAdoConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
     "Data Source=" & ThisWorkbook.path & "\" & ThisWorkbook.Name & ";" & _
     "Extended Properties=""Excel 8.0;HDR=YES;FMT=Delimited; IMEX=1;"""

    strSQL = "SET NOCOUNT ON " & Chr(13) _
        &  "CREATE TABLE #tempdata(tmpf1 date, tmpf2 int)" _
        & " INSERT INTO #tempdata(tmpf1,tmpf2)" _
        & " SELECT [DATE], [AMOUNT] FROM " & GetTableRange(StrTable)

    On Error GoTo ErrorSQL
    objAdoRS.Open strSQL, objAdoConn

我想执行这样的代码:

DECLARE @Category AS VARCHAR(MAX)
SELECT @Category = 
    COALESCE(@Category + ', ', '') + CAST(Category AS VARCHAR(20)) 
    FROM (SELECT DISTINCT Category FROM mytable) Books
DECLARE @DynamicPIVOT AS VARCHAR(MAX)
SELECT @DynamicPIVOT = 'SELECT ' + @Category +
' FROM (
    SELECT amount, Category FROM mytable
) Books
PIVOT (
    MAX(amount) FOR Category IN (' + @Category + ')
) Result;'

EXEC (@DynamicPIVOT)

此致, 文斯.

你试过吗?比创建临时 table、插入和 select 容易得多。您通过一个 select 语句直接插入临时 table。

  & "SELECT [DATE], [AMOUNT] INTO #TempData FROM " & 
  GetTableRange(StrTable) 

只需使用 JET/ACE SQL's very own crosstab query 动态 运行 数据透视查询。

strSQL = "TRANSFORM MAX(t.[AMOUNT]) AS MaxAmount" _
           & " SELECT t.[DATE] " _
           & " FROM [SheetName$] t" _
           & " GROUP BY t.[DATE]" _
           & " PIVOT t.[PEOPLE]"

请注意:有 255 列的限制。所以如果PEOPLE超过254就需要调整。