如果Where Condition中的语句可能有空或Null参数Power Query Excel SQL

时间:2017-12-06 23:36:04

标签: sql excel-vba powerquery vba excel

我在Excel电子表格中有一个参数,用于序列号和工单号。让我们说Cell本身被命名为SerialNumber和WorkOrderNumber

请注意,有时我们知道序列号或工作订单的值,但有时我们不会

在PowerQuery中使用Get Parameter函数

    let GetValue=(rangeName) => 
        let
          name = Excel.CurrentWorkbook(){[Name=rangeName]}[Content],
          value = name{0}[Column1]
        in
          value
        in GetValue

我能够在下面的let语句中将SerialNumber和WorkOrderNumber作为名为SerialNumberP和WorkOrderNumberP的参数获取:

    Let

      SerialNumberP = GetParamater("SerialNumber"),
      WorkOrderNumberP = GetParameter("WorkOrderNumber")

然后我有一个SQL Select语句:

    Select
       a.SerialNumber,
       b.WorkOrderNumber,
       a.PartNumber,
       a.BatchNumber,
       a.CreateDate,
       b.CreatedBy,
       b.ComponentSerialNumber,

我们的数据库位于网络中的SQL数据库中,因此我的From语句是:

    From [Database].[Category].[Table1] as a 
    inner join [Database].[Category].[Table2] as b 
    on a.WorkOrderNumber = b.WorkOrderNumber

现在我想使用where语句,我可以搜索已知的SerialNumber或WorkOrderNumber,或两者都适用。但是当我使用以下代码时:

    Where
    a.SerialNumber in ('"& SerialNumberP &"') 
    and b.WorkOrderNumber in ('"& WorkOrderNumberP &"')

当一个字段为空(SerialNumber或WorkOrderNumber)时,它会检测到空字段为空且查询未通过。

我得到的错误是:DataSource.Error:Microsoft SQL:此数据库功能不支持查询选项'查询'价值' null'。如果我填写两个字段,它就可以了

最好的方法是什么?

提前致谢

编辑:我已尝试在Where条件中使用If语句,但它似乎无法正常工作

e.g。

    Where
    If SerialNumberP Is Not Null Then a.SerialNumber In ('"& SerialNumberP &"')
    If WorkOrderNumberP Is Not Null Then b.WorkOrderNumber In ('"& WorkOrderNumberP &"')

1 个答案:

答案 0 :(得分:0)

尝试一下:

Where
(a.SerialNumber Is Null Or a.SerialNumber in ('"& SerialNumberP &"')) and
(b.WorkOrderNumber Is Null Or b.WorkOrderNumber in ('"& WorkOrderNumberP &"'))