我已经为Excel Power Query编写了一个SQL脚本,该脚本从Oracle数据库中获取值。我的查询由命名的excel单元格组成,其中包括日期范围,“产品”和“分析”,当输入所有这些参数时,它可以完美地工作。
有些情况下,如果“分析”字段留空,我想返回某个“产品”在某个日期范围内的所有结果。一般来说,如果参数字段为空,则返回数据库条目的所有行,而不是特定行。
由于数据库中数据的性质,我不得不使用Text.From来获取查询,以识别来自命名单元格的搜索参数。但是,这会产生空单元格“Expression.Error:我们无法将null值转换为Text类型。”
我可能应该补充一下,SQL对我来说仍然是一个全新的世界。
现在,如果我从脚本中完全删除参数(between these),它将按预期工作。这给了我一个想法,如果命名的单元格为空,可以使用if-then else语句使整个参数“消失”。但是语法有问题,它仍然给我“Expression.Error:我们无法将null值转换为Text类型。”
先谢了
analysis = Excel.CurrentWorkbook () {[Name="analysis"]}[Content]{0}[Column1],
product = Excel.CurrentWorkbook () {[Name="product"]}[Content]{0}[Column1],
startdate = Excel.CurrentWorkbook () {[Name="startdate"]}[Content]{0}[Column1],
enddate = Excel.CurrentWorkbook () {[Name="enddate"]}[Content]{0}[Column1],
sqlstartdate = Date.From(startdate),
sqlenddate = Date.From(enddate),
Source = Odbc.Query("dsn=xxdatabase", "SELECT S_SAMPLE.COLLECTIONDT , S_SAMPLE.S_SAMPLEID , S_SAMPLE.PRODUCTID , S_SAMPLE.U_CORNNR , S_SAMPLE.U_REACTORNR , S_SAMPLE.U_ADDITIONALINFO , S_SAMPLE.U_MATERIALNUMBER , SDIDATAITEM.PARAMID , SDIDATAITEM.DISPLAYVALUE , SDIDATAITEM.DISPLAYUNITS#(lf)#(lf)FROM xx.S_SAMPLE#(lf)#(lf)LEFT JOIN xx.SDIDATAITEM ON S_SAMPLE.S_SAMPLEID = SDIDATAITEM.KEYID1#(lf)#(lf)WHERE PRODUCTID='" &Text.From(product)& "' AND **if [analysis] = null then "" else [PARAMID='" &Text.From(analysis)& "']** AND COLLECTIONDT between TO_DATE('" &Text.From(sqlstartdate)& "','DD.MM.YYYY') AND TO_DATE('" &Text.From(sqlenddate)& "','DD.MM.YYYY')#(lf)")
字符串
3条答案
按热度按时间esbemjvw1#
如果你得到了
“表达式。错误:我们无法将null值转换为Text类型。”
然后将表达式 Package 为
字符串
但总的来说我觉得你在找这个
型
mznpcxlj2#
我不知道如何编写在Excel中工作的查询,所以我只是猜测,但希望你能用它做些什么。
这是您当前的
where
子句:字符串
如果可能的话,将最后两行重写为如下内容:
型
再说一次:我不熟悉这种语法--方括号,部分括在双引号里等等。
顺便说一下,在Oracle中,nothing 等于null,所以我实际上使用
IS NULL
型
vbopmzt13#
我咨询了Bing一段时间,我们设计了以下工作解决方案:
字符串
如果analysis为空,则将that添加到定义中将忽略paramid。
感谢大家!