【发布时间】:2017-08-28 17:05:08
【问题描述】:
我已经搜索了几个星期,但在找到以下问题的答案方面没有取得太大成功......
我能否在 Excel 中(在开发人员选项中)创建一个文本框,然后让用户输入的文本框内容成为 SQL (T-SQL) 中 WHERE 语句的一部分?理想情况下,我希望用户能够输入一个 3 位数的 ID 号码,然后点击搜索按钮以在相同或不同的工作表上显示结果列表。如果文本框不简单,那么我将满足于引用单元格的内容来代替文本框的内容。
类似这样的:
SELECT T.CustomerName, T.NetAmount, T.TransactionType
FROM TheDatabase.dbo.TransactionsTable T
WHERE T.ScheduledDate > '2016-01-01' AND
(T.Status = 'InProcess' OR T.Status = 'Completed') AND
T.CustomerID = [textbox1.contents / cell(A1).. something]
我知道 SQL 不是为这样工作而设计的,但我希望它能说明我想要完成的工作。
一些背景:
我将一些职责转交给一位同事,因为我要换一个角色。我有一个定期运行的报告,它为我提供有关应付账款交易的统计信息。我必须在一夜之间学习一些基本的 SQL,并且在设计 SELECT 语句和边学习边学习方面非常成功。问题是,每当我需要将新客户(基本上是一个 3 位数字)添加到我的帐户列表中以进行审查时,我都必须修改查询。这对我来说没什么大不了的,我只是打开 PowerQuery,选择高级视图,然后编辑代码。我不能为下一个人修复工具,所以我需要一种方法,他们可以搜索他们想要的客户。
我可以加载所有客户,但主表中有超过 360 万笔交易,我们查看了 30 多个字段。另外,我将 3 个数据库中的至少 6 个表连接在一起以提取和计算所有信息。上次我尝试检索所有交易数据时,由于系统内存不足,我无法生产。我唯一一次成功查询到这么多数据花了将近 10 分钟。老实说,这对我来说不是问题,但是这个人必须一直运行它,我需要加快速度。如我所见,消除问题的唯一方法是只提取我需要的交易。当我现在这样做时,大约需要 3 秒。
我一直在使用的查询是在 Microsoft SQL Server Management Studio 中创建的,我基本上是在 Excel 中创建查询时复制查询并将其粘贴到“高级”框中。
任何关于这方面的建议都会对现在和未来的项目有所帮助!
【问题讨论】:
-
首先,您正在寻找
IN子句WHERE T.CustomerID IN (list of comma separated int values, or one column query resulset) -
第二,不知道你是如何设法执行 SQL 语句的。是在 Excel 里面吗?
-
第三,它看起来像一个XY问题,试着描述你的实际需要而不是你的解决方法。 meta.stackexchange.com/questions/66377/what-is-the-xy-problem
标签: sql sql-server excel tsql powerquery