带有 JOIN 的 SQL/Excel 查询参数

标签 sql sql-server excel parameters

我正在学习如何在 excel 驱动的 SQL 查询中使用参数(实际上我一般还在学习 SQL)。感谢 helped me build my query to modify the results as I need 的好人,我想更进一步,在 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 = ?) ( found here ) 因为我需要从 MODULE_FUNCTION 表中提取所有结果,并且仅在提供的组上存在匹配项时才从 FUNCTION_SECURITY 表的右侧插入结果(没有匹配项时保留 null )。

当我尝试使用 AND (sec.GROUP_ID = ?)最后我得到一个 “无效参数号”在 Excel 中。从我收集到的“?”只能与 WHERE 一起使用(并在测试查询中为我找到工作)。

我尝试了很多事情,包括声明@parameter,但无济于事。

我很想尝试this technique但如果可能的话,我想避免使用 VB。

最佳答案

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

您可以让工作表有一个用于组名称的单元格,然后是一个调用宏的按钮,您可以在其中更改 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。您可以将其设置为工作簿中任何工作表中的特定单元格。我会在它旁边创建一个按钮,称为“刷新表”或类似的东西。

如果您已经创建了一个链接到数据库的表,那么 Excel 中有一个连接对象。转到“数据”选项卡,然后单击“连接”。将弹出一个新窗口。查找与 SQL 查询匹配的连接。单击该连接并单击“属性”,然后将连接名称更改为简单的名称(通常是基于您连接到的服务器/表的长名称)。将其用于
ActiveWorkbook.Connections("connection name")

部分。

链接到工作表上的创建按钮和链接到宏:

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

关于带有 JOIN 的 SQL/Excel 查询参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13822936/

相关文章:

SQL - 删除重复的结果

sql-server - nvarchar 连接/索引/nvarchar(max) 令人费解的行为

SQL-Server 用 NULL 值替换空单元格

excel - Excel 文件的 Oledb 连接字符串

SQL Server - 将代码块放入 View /临时表

mysql SELECT 多对多 GROUP_CONCAT (如何获取所有记录)

sql - 检查并更改 SQL 中列的空值或 null 值?

mysql - Rails Active Admin PUT 不更新 bool 值 (SQL Server)

sql-server - Reporting Services 中的日期格式不正确

excel - 从 Excel VBA 运行 Bat 文件