使用按位AND将DB2 SQL查询转换为SQL Server查询

时间:2015-10-07 15:01:18

标签: sql-server sql-server-2008 db2

我工作的公司使用一个名为Showcase的程序在我们的财务部门中构建报表,Showcase根据插入到界面中的条件构建SQL查询并返回数据,然后在Excel中使用该数据进行进一步的格式化和分析。我们有一个特定的报告,一直在打破,所以我试图重写SQL Server中的查询。

FROM子句中有一部分执行按位AND。我以前从未在SQL查询中使用过这个问题,这就是Query有问题的地方。我甚至不确定它是通过按位AND实现的 - 它只是比较两个值的更准确的方法吗?

这是FROM Clause,因为它直接展示:

FROM 
S06947A4.GLDBFA.GLPCT T01 
INNER JOIN S06947A4.GLDBFA.GLPDA GLPDA ON  T01.CTCO=GLPDA.DACO  
LEFT OUTER JOIN S06947A4.GLDBFA.GLPBX T02 ON  T01.CTCO=T02.BXCO  AND T01.CTPAGE=T02.BXPAGE  AND GLPDA.DAYEAR=T02.BXYEAR  AND &GLMORS=T02.BXMORS  
LEFT OUTER JOIN S06947A4.GLDBFA.GLPGL T03 ON  T01.CTCO=T03.GLCO  AND T01.CTPAGE=T03.GLPAGE  AND GLPDA.DAYEAR=T03.GLYEAR  AND &GLMORS=T03.GLMORS  

这个问题似乎与两个LEFT OUTER JOINS的最后一部分有关:

&GLMORS=T02.BXMORS
&GLMORS=T03.GLMORS

我已经没有问题重建查询到这一点,如果我从这些JOINS中省略这两个部分我得到一些数据回来但是我可以告诉它是错的,因为我得到的行比我预期的多

任何指针或笔记都将非常感激。 非常感谢提前。

我已经对FROM子句进行了编辑,以便更具体地使用参数:

FROM 
    GLDBFA.GLPCT PCT
    INNER JOIN GLDBFA.GLPDA PDA ON  PCT.CTCO=PDA.DACO  
    LEFT OUTER JOIN GLDBFA.GLPBX PBX ON  CTCO=PBX.BXCO  AND CTPAGE=PBX.BXPAGE  AND PDA.DAYEAR=PBX.BXYEAR AND PGL.GLMORS=PBX.BXMORS
    LEFT OUTER JOIN GLDBFA.GLPGL PGL ON  CTCO=PGL.GLCO  AND CTPAGE=PGL.GLPAGE  AND PDA.DAYEAR=PGL.GLYEAR AND PGL.GLMORS=PBX.BXMORS  

带下划线的错误出现在第一个左外连接中:

AND PGL.GLMORS=PBX.BXMORS  

它不喜欢PGL.GLMORS'声明的一部分,但它在第二个左外连接中没问题,这对我来说没有意义。 希望这会有所帮助。

我发现了我的方式错误。 '& GLMORS'值实际上是传递给Showcase的变量,所以我必须在这些变量值中编码以满足FROM。

再次感谢所有人的投入和帮助。

2 个答案:

答案 0 :(得分:0)

表结构和/或错误消息会有很大帮助。

乍一看,&GLMORS=T03.GLMORS让我感觉您有GLMORS列有冲突,并且您需要&T01.GLMORS=T03.GLMORS之类的内容。

否则,按位(&)运算符是二元运算符,它需要2个值并输出结果。所以你得到了谎言5&12=4。在这种情况下,你有一个“一元”&,我没有线索它应该做什么,但它看起来不像一个按位AND。

答案 1 :(得分:0)

在引入之前引用相关名IntStream.range(0,100).collect( groupingBy( i -> i % 3, HashMap::new, filtering( i -> i % 2 == 0, toSet() ) ) ); ,请参阅代码片段中的注释:

PGL