2014-10-30 102 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-