Tsql 构造SQLWHERE子句以在Power查询中提取数据

Tsql 构造SQLWHERE子句以在Power查询中提取数据,tsql,powerquery,Tsql,Powerquery,基本上,我希望使用powerquery检索满足子句条件的数据行 我的电子表格中有400行查找值。 每行代表1个查找代码,例如,代码AAA1、AAB2等 假设我有一个select语句,我想用上面的代码构造where子句,这样我的end sql语句看起来就像 select * from MyTable where Conditions in ('AA1', 'AAB2') 到目前为止,我有这个 let Source = Excel.CurrentWorkbook(){[Name="Table5"]

基本上,我希望使用powerquery检索满足子句条件的数据行

我的电子表格中有400行查找值。 每行代表1个查找代码,例如,代码AAA1、AAB2等

假设我有一个select语句,我想用上面的代码构造where子句,这样我的end sql语句看起来就像

select * from MyTable where Conditions in ('AA1', 'AAB2')
到目前为止,我有这个

let
Source = Excel.CurrentWorkbook(){[Name="Table5"]}[Content],
#"Changed Type" = Table.TransformColumnTypes(Source,{{"Form ID",    
Int64.Type}}),
test = Sql.Database("myserver", "myDB", [Query="SELECT * FROM  myTable where" & #"Changed Type" & "])"
在 试验

显然,这不起作用,但无论如何,这是我的假想

你能告诉我怎么办吗? 非常感谢。 Peddie

我会根据Excel表格创建一个“查找”电源查询。我会将“加载到”属性设置为“仅创建连接”

然后,通过使用导航器选择“MyTable”连接到SQL server来启动主查询。然后,我将向主查询添加一个合并步骤,以加入“查找”查询,将“条件”列与“查找”代码相匹配。我会将连接类型设置为“内部”。“合并属性”窗口将直观地显示您选择的两列是否包含匹配的数据

这种方法不需要任何编码,更易于构建、扩展和维护

我将基于Excel表格创建一个“查找”电源查询。我会将“加载到”属性设置为“仅创建连接”

然后,通过使用导航器选择“MyTable”连接到SQL server来启动主查询。然后,我将向主查询添加一个合并步骤,以加入“查找”查询,将“条件”列与“查找”代码相匹配。我会将连接类型设置为“内部”。“合并属性”窗口将直观地显示您选择的两列是否包含匹配的数据


这种方法不需要任何编码,更易于构建、扩展和维护

Mike Honey的join最适合您的问题,但是如果您发现自己在where子句中需要其他逻辑,这里有一个更通用的解决方案


通常,Power query只在等式表达式上生成行筛选器,但您可以将任何需要的代码放入
表中。选择行
筛选器,如
每个列表。包含({“AA1”,“AAB2”},[条件])

因此,对于您的表,您的查询如下所示:

let
    Source = Excel.CurrentWorkbook(){[Name="Table5"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Form ID", Int64.Type}}),
    test = Sql.Database("myserver", "myDB"),
    yourTable = test{[Name="myTable"]}[Data],
    filtered = Table.SelectRows(yourTable, each List.Contains(#"Changed Type"[Form ID], [Conditions]))
in
    filtered

使用库函数的主要缺点是
Table。SelectRows
只知道如何为特定的表达式模式生成SQL where子句,因此行筛选器可能在下载整个表后在您的计算机上运行,而不是让SQL Server运行筛选器。

Mike Honey的join最适合您的问题,但是,如果您发现自己在where子句中需要其他逻辑,那么这里有一个更通用的解决方案


通常,Power query只在等式表达式上生成行筛选器,但您可以将任何需要的代码放入
表中。选择行
筛选器,如
每个列表。包含({“AA1”,“AAB2”},[条件])

因此,对于您的表,您的查询如下所示:

let
    Source = Excel.CurrentWorkbook(){[Name="Table5"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Form ID", Int64.Type}}),
    test = Sql.Database("myserver", "myDB"),
    yourTable = test{[Name="myTable"]}[Data],
    filtered = Table.SelectRows(yourTable, each List.Contains(#"Changed Type"[Form ID], [Conditions]))
in
    filtered

使用库函数的主要缺点是
Table。SelectRows
只知道如何为特定的表达式模式生成SQL where子句,因此行筛选器可能在下载整个表后在您的计算机上运行,而不是让SQL Server运行筛选器。

发生了什么?它是否运行但没有数据?出错?事实上不是“where”而是“in”,但即使这样,它也会抛出一个错误。发生了什么?它是否运行但没有数据?出错?事实上,它不是“where”,而是“in”,但即使如此,它也会抛出一个错误。