我工作的公司使用一个名为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。
再次感谢所有人的投入和帮助。
答案 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