我从事制造具有大量可追溯组件的设备的工作,并且我有一批理论上看起来像这样的数据:
我在Excel中有一些可互换的参数,例如:
SerialNumberP = GetParameter("SerialNumber"),
ProductCodeP = GetParameter("ProductCode"),
WorkOrderNumberP = GetParameter("WorkOrderNumber"),
PartCodeP = GetParameter("PartCode"),
BuildDateP = GetParameter("BuildDate"),
使用此方法,我成功完成了where子句,使用诸如此类的参数逐一搜索我的数据
Where
a.SerialNumber in ("& SerialNumberP &")
但是,由于字段太多,有时提供给我们的信息会有所不同。因此,在带有标题的不同单元格中:
我想在可获得不同信息的不同情况下使用AND
和OR
子句。
例如:
到目前为止,我所拥有的与以下内容类似:
Where
(a.SerialNumber in ("& SerialNumberP &"))
Or (a.WorkOrderNumber in ("& WorkOrderNumberP &"))
Or (b.WorkOrderNumber in ("& WorkOrderNumberP &") _
AND a.ComponentPartCode = '"& PartNumberP &"')
Or (a.ComponentPartCode = '"& PartNumberP &"' _
AND a.SerialNumber in ("& SerialNumberP &"))
Or a.BatchNumber in ("& BatchNumberP &")
但是,众所周知,它是一个包含的OR
,仅使用字段Part Batch
就可以满足2个不同的OR
条件,并且将输出两个他们。
我想问一下是否有一种方法可以使Excel单元格中的其他字段为空,仅能够查询有限的信息(例如序列号和部件号),并且仅输出相应的一行?
谢谢。
答案 0 :(得分:0)
听起来您正在通过使用从Excel工作簿加载的参数在Power Query中设置动态SQL查询字符串?因为您正在用M代码设置查询字符串,所以可以有条件地创建字符串元素。我已经做了类似的事情,我想有多个要查询的字段,但可能想使用字段的任意组合来查看。我的解决方案是对每个字段使用AND包含,如果没有为该字段指定值,则根本不创建该行。我想这就是您要尝试的方法,尽管我不确定100%。
"SELECT * FROM yourtable " &
"WHERE a.SerialNumber <> NULL " &
if SerialNumberP <> null then "AND a.SerialNumber IN ("& SerialNumberP &") " else "" &
if WorkOrderNumberP <> null then "AND a.WorkOrderNumber IN ("& WorkOrderNumberP &") " else "" &
if PartNumberP <> null then "AND a.ComponentPartCode IN ("& PartNumberP &") " else "" &
if BatchNumberP <> null then "AND a.BatchNumber IN ("& BatchNumberP &") " else "" &
""