2014-10-30 104 views
0

我有一個SQL查詢在Datawindow背後,我有一個where子句,我想根據某些ind執行,將作爲參數傳遞給Datawindow。我在查詢中有多個表連接。我知道我可以使用case來操作where子句,但where子句依賴於表連接之一。是否有可能我可以操縱那個表連接也使用該ind。比方說,如果這個Ind是'Y'包含那個表連接,並且在主查詢中有cluase,否則如果它的值是'N',不要考慮表連接和主查詢中cluase的位置。SQL查詢在PowerBuilder數據窗口中的where子句中查詢

請參見下面的查詢:

SELECT * FROM ABC, XYZ 
    WHERE XYZ.NAME = "Mark" 
    AND XYZ.SURNAME = "Butcher" 

我想要的XYZ表連接和地方,如果我的IND是「Y」否則根本不會考慮表XYZ加盟,其中cluase和收益狀況應只工作基於現有查詢的結果。

請建議,如果這是如果你需要在查詢中的任何模式相同的列,您可以通過使用2個查詢騙做些力所能及.Thanks

回答

0

  • 使用在一般情況下查詢數據窗口直接
  • 動態通過訪問datawindow.table.select屬性改變從pbscript代碼查詢(可以用modify()改變它,當你在第二種情況下

    my_dw.modify("datawindow.table.select='select col_1, col_n from abc, xyw where <different criteria>'") 
    my_dw.retrieve() 
    

在原型設計,你可以存儲在一個字符串變量modify()的結果,將得到一個錯誤信息 - 如果任何 - 幫你調試,如果你沒有得到正確的結果或沒有結果的所有。

0

您可以使用SetSqlSelect來設置datawindow的Sql語句的值。 (還有一個GetSqlSelect來獲取值。)您可以使用它來修改代碼中的sql,然後將其放回到數據窗口中。但是,如果你這樣做,IIRC你不能使用檢索參數,所以你必須在你的代碼中構建完整的SQL。

0

數據窗口的sqlpreview事件允許您以任何希望的方式操作sql語句,只要您使用已定義的列名和數據類型返回結果即可。您可以在這裏訪問任何檢索參數。

0

當您更改查詢時,請小心,您的新查詢中的列數必須與數據窗口中的列數相同。而當你使用Modify方法的時候,就像你使用SetSqlSelect方法一樣。

避免使用「select *」準備查詢並使用查詢,其中所有列都清晰地定義,例如Seki的例子。

0

當聯接有條件時,使用OUTER JOIN ... ON語法。

SELECT * FROM ABC 
    OUTER JOIN XYZ 
    ON ABC.someCol = XYZ.someCol 
    AND XYZ.NAME = "Mark" 
    AND XYZ.SURNAME = "Butcher" 
    AND :myIndicator = 'Y' 

- 保羅Horan-