ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 1674|回复: 11

[求助] Powerquery -在SQL查询中引用Excel单元格值

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-7-5 09:26 | 显示全部楼层 |阅读模式
本帖最后由 wang93915066 于 2024-7-5 16:25 编辑

求助高人,Powerquery -在SQL查询中引用Excel单元格值

目的:根据Sheet1中A1和A2单元格的值 (例如:20240601 和20240630),进行PQ查询SQL数据库并反馈相应的内容

网上看来的资料如下,

https://stackoverflow.com/questi ... ery-where-statement

示例代码:


let    Source = Sql.Database("localhost", "StackOverflowTest", [Query="SELECT #(lf)    Model, Factory, TargetTime, TotalEvalMins #(lf)FROM #(lf)    AMSView #(lf)WHERE #(lf)    WeekNumber = " & Number.ToText(week_number)])in    Source


实际应用的需求如下:
将excel文件中sheet1的A1单元格的值传到 ValueFromA1 , A2单元格的值传到 ValueFromA2 , 但是自己在使用过程中不知道如何修改
let



    Source = Sql.Database(

        {"192.168.0.254", "TESTDB"},

        let

            query = "select COPTG.TG004,COPTG.TG006,TG045+TG046 FROM COPTH LEFT JOIN COPTG ON TG001 = COPTH.TH001 AND TG002 = COPTH.TH002 WHERE COPTG.TG023 = 'Y' AND TG003 BETWEEN '" & ValueFromA1 & "' AND '" & ValueFromA2 & "' GROUP BY COPTG.TG006,COPTG.TG004,TG045+TG046 ORDER BY TG006"

        in

            query

    )

in

    Source



TA的精华主题

TA的得分主题

发表于 2024-7-5 13:17 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 pxy0409 于 2024-7-5 13:31 编辑

找不到表应该是数据源问题.

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-7-8 08:52 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
还有大佬帮忙看下么,谢谢了先!

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-7-9 13:35 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
报错如下,麻烦大佬看下如何修改,谢谢!

Expression.Error: 该键与表中的任何行均不匹配。
详细信息:
    Key=
        Row=1
    Table=[Table]

let
    // 从Excel工作表加载数据
    Source = Excel.CurrentWorkbook(){[Name="查询日期"]}[Content],
    // 确保"Date"列的标题在Excel中是第一行,并且数据从第二行开始
    // 直接获取"Date"列的第一行和第二行的值
    ValueFromA1 = Text.From(Source{[Row=1]}{[Column=0]}), // 第一行的数据
    ValueFromA2 = Text.From(Source{[Row=2]}{[Column=0]}), // 第二行的数据

    // 创建数据库连接记录
    DatabaseInfo = {
        Server = "192.168.0.254",
        Database = "testDB",
        User = "sa",
        Password ="111111"
    },
   
    // 构建SQL查询
    query = "SELECT COPTG.TG006, SUM(TH037+TH038) AS Total " &
            "FROM COPTH LEFT JOIN COPTG ON TG001 = COPTH.TH001 AND TG002 = COPTH.TH002 " &
            "WHERE COPTG.TG023 = 'Y' AND TG003 BETWEEN '" & ValueFromA1 & "' AND '" & ValueFromA2 & "' " &
            "AND COPTG.TG004 = '1207' " &
            "GROUP BY COPTG.TG006",
   
    // 使用Sql.Database函数执行SQL查询
    Results = Sql.Database(DatabaseInfo, query)
in
    Results




test.zip

17 KB, 下载次数: 2

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-7-9 13:37 | 显示全部楼层
l求大佬帮忙看看是哪里出了问题, 一直报错

et
    // 从Excel工作表加载数据
    Source = Excel.CurrentWorkbook(){[Name="查询日期"]}[Content],
    // 确保"Date"列的标题在Excel中是第一行,并且数据从第二行开始
    // 直接获取"Date"列的第一行和第二行的值
    ValueFromA1 = Text.From(Source{[Row=1]}{[Column=0]}), // 第一行的数据
    ValueFromA2 = Text.From(Source{[Row=2]}{[Column=0]}), // 第二行的数据

    // 创建数据库连接记录
    DatabaseInfo = {
        Server = "192.168.0.254",
        Database = "testDB",
        User = "sa",
        Password ="111111"
    },
   
    // 构建SQL查询
    query = "SELECT COPTG.TG006, SUM(TH037+TH038) AS Total " &
            "FROM COPTH LEFT JOIN COPTG ON TG001 = COPTH.TH001 AND TG002 = COPTH.TH002 " &
            "WHERE COPTG.TG023 = 'Y' AND TG003 BETWEEN '" & ValueFromA1 & "' AND '" & ValueFromA2 & "' " &
            "AND COPTG.TG004 = '1207' " &
            "GROUP BY COPTG.TG006",
   
    // 使用Sql.Database函数执行SQL查询
    Results = Sql.Database(DatabaseInfo, query)
in
    Results

test.zip

17 KB, 下载次数: 2

TA的精华主题

TA的得分主题

发表于 2024-7-9 15:56 来自手机 | 显示全部楼层
wang93915066 发表于 2024-7-9 13:37
l求大佬帮忙看看是哪里出了问题, 一直报错

et

数据库链接失效?
SQL直接运行可以吗?

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-7-9 16:51 | 显示全部楼层
zpy2 发表于 2024-7-9 15:56
数据库链接失效?
SQL直接运行可以吗?

我将SQL中 where 后面的BETWEEN '" & ValueFromA1 & "' AND '" & ValueFromA2 & "'  ValueFromA1和ValueFromA2 替换成具体数值的话,是可以查询出结果的.

谢谢!

TA的精华主题

TA的得分主题

发表于 2024-7-9 19:12 来自手机 | 显示全部楼层
wang93915066 发表于 2024-7-9 16:51
我将SQL中 where 后面的BETWEEN '" & ValueFromA1 & "' AND '" & ValueFromA2 & "'  ValueFromA1和ValueF ...

那应该是参数没有传递。
我看你发的链接是 用 定义 名称实现的,你可以按stackoverflow上的方法试试。

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-7-9 21:41 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
谢谢,我明天用一个参数先试试

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-7-10 07:33 | 显示全部楼层
zpy2 发表于 2024-7-9 19:12
那应该是参数没有传递。
我看你发的链接是 用 定义 名称实现的,你可以按stackoverflow上的方法试试。

可以了,谢谢!

let
    // 从Excel工作表加载数据
    Source = Excel.CurrentWorkbook(){[Name="查询日期"]}[Content],
    // 确保"Date"列的标题在Excel中是第一行,并且数据从第二行开始
    // 直接获取"Date"列的第一行和第二行的值
    ValueFromA1 = Text.From(Source[Date]{0}),
    ValueFromA2 = Text.From(Source[Date]{1})
in
   
let
    Source = Sql.Database("192.168.0.254","testDB",[Query="SELECT COPTG.TG006, SUM(TH037+TH038) AS Total " &
            "FROM COPTH LEFT JOIN COPTG ON TG001 = COPTH.TH001 AND TG002 = COPTH.TH002 " &
            "WHERE COPTG.TG023 = 'Y' AND TG003 BETWEEN '" & ValueFromA1 & "' AND '" & ValueFromA2 & "' " &
            "AND COPTG.TG004 = '1207' " &
            "GROUP BY COPTG.TG006"])
in
    Source
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-21 19:11 , Processed in 0.035373 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表