当前位置: 首页 > 面试题库 >

带JOIN的SQL / Excel查询参数

祁绪
2023-03-14
问题内容

我正在学习如何在Excel驱动的SQL查询中使用参数(实际上,我仍在学习SQL),我想更进一步,并在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 = ?)(在此处找到),因为我需要从MODULE_FUNCTION表中提取所有结果,并且仅在提供的组中存在匹配项时才在FUNCTION_SECURITY表的右侧插入结果(如果没有匹配项,则保留null)

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

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


问题答案:

我知道您说过要避免使用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/zh-CN/excel-help/add-a-button-and-assign-a-macro-
to-it-in-a-worksheet-HP010236676.aspx



 类似资料:
  • 我有证据: 我想从我的数据库中获得结果,它包含每个对象中的列表technicStatusList=new arraylist<>(),我想在其中有一个TechnicStatus仅值为isactive=true。 为此,我使用了相同的JPQL查询: 但是得到一个包含TechnicStatus的结果,该结果返回一个包含true和false的TechnicStatus.isactive=true,Tec

  • 问题内容: 我有以下两个查询: 查询执行计划统计信息:( 相对于批次的查询成本) 查询1(子查询):56% 查询#2(加入):44% 我认为子查询是最佳的,因为子查询将在应用WHERE筛选器后执行。统计数据表明,Query#2-JOIN方法更好。 请建议。另外,作为SQL Server中级用户,我如何得出哪个查询更好(如果有帮助的话,除执行计划外,其他都可以) 谢谢你。 问题答案: 连接比子查询快

  • 问题内容: 我正在尝试测试将参数传递给sql.DB.Query方法的行为(使用database / sql包和github.com/lib/pq上的PostgreSQL驱动程序)。处理原始查询字符串以查看如何插入参数后,是否有任何方法可以获取原始查询字符串?例如,我正在考虑编写一个准备好的查询,然后检查结果语句。有任何想法吗?谢谢! 问题答案: 它看起来不像在查询本身中插入参数。它发送查询,然后等

  • 主要内容:一、错误案例引入问题,二、多表查询的分类,1.等值连接和非等值连接,2.自连接和非自连接,3.内连接和外连接,三、实现多表查询的语法,1.内连接(INNER JOIN)的实现,2.外连接(OUTER JOIN)的实现,四、UNION的使用,五、7种SQL JOINS的实现,1.代码实现,六、SQL99语法新特性,1.自然连接,2.USING连接关联查询,也称为多表查询,指两个或更多个表一起完成查询操作。 前提条件:这些一起查询的表之间是有关系的(一对一、一对多),它们之间一定是有关联字

  • 本文向大家介绍SQL联合查询inner join、outer join和cross join的区别详解,包括了SQL联合查询inner join、outer join和cross join的区别详解的使用技巧和注意事项,需要的朋友参考一下 对于开发使用到数据库的应用,免不了就要使用联合查询,SQL中常用的联合查询有inner join、outer join和cross join;这三者的区别很多人

  • 问题内容: 我正在尝试构造一个查询,该查询将包括指示用户是否下载了文档的列。我有一个名为HasDownloaded的表,其中包含以下各列:id,documentID,memberID。找出用户是否下载了 特定 文档很容易;但我需要生成一个查询,其结果将如下所示: 该ID并不是很重要;我感兴趣的是文档是否已下载(是否为NULL)。 这是我的查询: 问题是,只有在HasDownloaded表中存在指定