使用SQL的新手。我试图通过excel VBA通过查询字符串执行SQL代码,以测试存储在同一工作簿上的工作表中的表的动态数据透视查询。普通查询工作正常(SELECT),但SQL语句没有。
我一次又一次地收到Invalid SQL statement expected; 'DELETE','INSERT'
...错误
我想要实现的是一个用于检索动态数据透视的sql查询(行到变量列)。我不想用数据透视表来实现这一点我想用VBA的SQL字符串查询来实现它。
如何做到这一点?
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)
此致 文斯。
答案 0 :(得分:0)
& "SELECT [DATE], [AMOUNT] INTO #TempData FROM " &
GetTableRange(StrTable)
答案 1 :(得分:0)
只需使用JET/ACE SQL自己的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,则需要进行调整。