具有JOIN的SQL / Excel查询参数

我正在学习如何在excel驱动的SQL查询中使用参数(实际上我仍然在学习SQL)。 感谢帮助我构build查询以根据需要修改结果的好人,我想要更进一步,并在Excel中提供参数以过滤结果。

这是我的查询:

SELECT fun.FUNCTION_ID ,COALESCE(fun.parent_function, fun2.function_id) as PARENT_FUNCTION ,fun.MODULE_ID ,fun.DESCRIPTION ,fun.FUNCTION_PURPOSE ,fun.PB_OBJECT ,sec.GROUP_ID ,sec.ACCESS_LEVEL from MODULE_FUNCTION fun LEFT JOIN MODULE_FUNCTION fun2 ON fun.function_id = fun2.function_id AND fun2.function_id IN (SELECT parent_function FROM MODULE_FUNCTION) LEFT OUTER JOIN FUNCTION_SECURITY sec ON fun.FUNCTION_ID = sec.FUNCTION_ID AND sec.GROUP_ID = 'GROUP_NAME' 

我需要做的是让团队成员在Excel工作表中运行这个查询,并在第二个JOIN中为“GROUP_NAME”提供他们的组名。 不幸的是,我不能使用语法WHERE (sec.GROUP_ID = ?) ( 在这里find ),因为我需要从MODULE_FUNCTION表中提取所有结果,并且只有在提供的组匹配时才从FUNCTION_SECURITY表插入结果如果不匹配,则为空)。

当我试图在最后使用AND (sec.GROUP_ID = ?)时,我在Excel中得到一个“无效的参数号” 。 从我所收集到的“?” 只能与WHERE一起使用(并且在testing查询中为我find)。

我已经尝试了很多东西,包括声明一个@参数,但没有用。

我试图尝试这种技术,但我想避免VB,如果可能的话。

我知道你说过要避免使用VB,但是对于你想做的事情来说这并不是太复杂。

你可以让工作表有一个单元格的组名,然后调用一个macros的button,你会改变sql查询来调整group_id。

就像是:

 Dim sql As String sql = "select ... from ... and sec.GROUP_ID = '?'" sql = Replace(sql, "?", Worksheets("Analysis").Range("A1").Value) With ActiveWorkbook.Connections("connection name").OLEDBConnection .CommandText = sql .Refresh End With 

哪里:

 Worksheets("Analysis").Range("A1").Value 

是Group_ID。 您可以将其设置为工作簿中任何工作表中的特定单元格。 我会在它旁边创build一个名为“刷新表”或类似的button。

如果您已经创build了一个链接到数据库的表,那么在Excel中有一个连接对象。 进入数据标签,然后点击“连接”。 一个新的窗口会popup。 find与SQL查询匹配的连接。 点击该连接,然后点击“属性”,然后将连接名称更改为简单(通常是基于连接的服务器/表的长名称)。 使用它的

 ActiveWorkbook.Connections("connection name") 

部分。

链接在工作表上创buildbutton并链接到macros:

http://office.microsoft.com/en-us/excel-help/add-a-button-and-assign-a-macro-to-it-in-a-worksheet-HP010236676.aspx