我工作的公司使用稱爲Showcase的程序在我們的財務部門構建報表,Showcase根據插入到接口中的條件構建SQL查詢並返回數據然後在Excel中使用它進一步格式化和分析。我們有一個特定的報告不斷突破,所以我試圖重寫SQL Server中的查詢。將DB2 SQL查詢與按位AND轉換爲SQL Server查詢
FROM子句中有一部分執行按位AND。我以前從來沒有在SQL Query中使用過這個,這是查詢有問題的地方。我甚至不知道它是如何實現按位與 - 它是比較兩個值的更準確的方法嗎?
下面是FROM子句,因爲它是未來直展櫃:
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的最後部分連接:
&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。
再次感謝所有您的意見和協助。
所以這是被髮送到一個SQL Server數據庫的SQL是什麼呢?或者是自己展示數據庫? – Rikalous
因此,展示是一個連接到我們的金融系統的程序,但人們爲其構建的查詢似乎經常中斷。我已經開始構建用於報告的Datawarehouse,並且最近我爲我們的金融系統設置了一個ODBC連接來將這些數據提取出來,以便我可以在SQL Server中重新編寫這些查詢。由於這些查詢是系統生成的,因此他們似乎使用了我不熟悉的一些方法 - 例如FROM子句中的按位AND。這是否更有意義? – JasonR
好的 - 那麼財務系統就不是sqlsvr了。 – Rikalous