一种通过用户配置生成子查询的方法与装置制造方法

文档序号:6524454阅读:177来源:国知局
一种通过用户配置生成子查询的方法与装置制造方法
【专利摘要】本发明公开了一种通过用户配置生成子查询的方法,所述的通过用户配置生成子查询的方法,该方法通过界面配置可生成对数据库表进行按条件分列处理的视图或子查询,生成的视图或子查询可以作为报表开发步骤“选择报表所需数据库表”时的特殊待选数据库表,故该方法可以作为报表开发系统的前置处理装置,避免了开发人员去处理复杂的查询和数据整理,易于修改和维护。
【专利说明】一种通过用户配置生成子查询的方法与装置
【技术领域】
[0001]本发明涉及一种通过用户配置生成子查询方法,当报表开发需要对数据库表某一列数据按条件进行分列展示时,此方法可提供中间层的视图或子查询。
【背景技术】
[0002]现有技术中,通过选择报表所需数据库表,并设置数据库表的连接关系以及其他过滤条件,从而选择字段用于报表展示。当报表要求对数据库表中的某一列数据信息进行按条件分列展示时,需要开发人员在后台开发完成查询和处理数据,增加了报表开发的复杂度。

【发明内容】

[0003]为了克服现有技术中的上述不足,本发明提出了一种通过用户配置生成子查询的方法,当数据库表某一列需要按条件进行分列报表展示时,按用户配置条件生成基于该数据库表的视图(子查询),将该视图(子查询)作为报表开发步骤“选择报表所需数据库表”的特殊待选数据库表。
[0004]为实现上述发明目的,本发明采用的技术方案如下:
[0005]一种通过用户配置生成子查询的方法,其特征在于:
[0006]步骤201,开始;
[0007]步骤202,选择待分列字段所在数据库表;
[0008]步骤203,判断条件判断字段和待分列字段是否都位于同一数据库表;
[0009]如果判断为否,继续执行步骤204 ;
[0010]步骤204,选择判断字段所在数据库表;
[0011]步骤205,设置连接关系,所述连接关系为将一张表的一行与另一张表的一行或多行关联起来所需满足的条件;
[0012]步骤206,设置过滤条件,所述过滤条件为筛选数据的表达式;
[0013]步骤207,设置条件分列明细;
[0014]步骤208,输出所生成的子查询;
[0015]步骤209,结束。
[0016]优选地,在步骤203中,如果判断的结果为是,则直接跳转执行步骤206。
[0017]优选地,所述步骤202,选择待分列字段所在数据库表;步骤203,判断条件判断字段和待分列字段是否都位于同一数据库表;如果判断为否,继续执行步骤204 ;步骤204,选择判断字段所在数据库表;进一步包括,
[0018]步骤302,通过查询数据库数据字典,获取数据库系统业务表信息供选择;
[0019]步骤303,获取选择设置信息;
[0020]步骤304,判断选择的表是否待分列字段所在表;
[0021]如果步骤304中判断结果为“是”,则执行步骤305,将选择的表标记为主表;[0022]如果步骤304中判断结果为“否”,则执行步骤306,将选择的表标记为子表;
[0023]步骤307,判断是否选择完成;
[0024]如果步骤307中判断结果为“否”,将会跳转到步骤302继续选择;
[0025]如果步骤307中判断结果为“是”,则执行步骤308,判断是否有且只有一张主表;
[0026]如果步骤308中判断结果为“是”,则执行步骤309,拼接生成子查询sql的from部分;
[0027]如果步骤308中判断结果为“否”,则执行步骤310,删除选择的多余主表,跳转回步骤307 ;
[0028]步骤311,判断是否含有子表;
[0029]如果步骤311中判断结果为“是”,则执行步骤312。
[0030]优选地,所述步骤205设置连接关系,所述连接关系为将一张表的一行与另一张表的一行或多行关联起来所需满足的条件,进一步包括
[0031]步骤312,转到连接关系设置;
[0032]步骤313,获取连接关系;
[0033]步骤314,判断是否设置完成;
[0034]如果步骤314中判断结果为“否”,则跳转回步骤312继续设置;
[0035]如果步骤314中判断结果为“是”,则执行步骤315。
[0036]优选地,所述步骤206,设置过滤条件,所述过滤条件为筛选数据的表达式,进一步包括,
[0037]步骤315,进行过滤条件设置;
[0038]步骤316,获取过滤条件;
[0039]步骤317,判断是否设置完成;
[0040]如果步骤317中判断结果为“否”,则跳转回步骤315继续设置;
[0041]如果步骤317中判断结果为“是”,则执行步骤318,生成视图(子查询)sql的where部分。
[0042]优选地,所述步骤207,设置条件分列明细,进一步包括,
[0043]步骤319,进行分列明细设置;
[0044]步骤320,进行条件判断设置;
[0045]步骤321,获取拆分列、输出列、输出默认值信息;
[0046]步骤322,生成 case when 语句的 then、else 和 end as 部分;
[0047]步骤323,获取条件列判断明细信息;
[0048]步骤324,生成case when语句的when部分;
[0049]步骤325,生成完整的case when条件判断sql片段;
[0050]步骤326,判断是否设置完成;
[0051]如果步骤326中判断结果为“否”,则跳转回步骤319继续设置;
[0052]如果步骤326中判断结果为“是”,则执行步骤327,生成select部分。
[0053]优选地,所述步骤208,输出所生成的子查询,进一步包括,
[0054]步骤328,将上述select部分、from部分、where部分进行拼接子查询sql输出。
[0055]优选地,如果步骤311中判断结果为“否”,直接跳转到步骤315,进行过滤条件设置;
[0056]优选地,在所述步骤320,进行条件判断设置,进一步包括,
[0057]每一次完整的条件判断设置都将生成步骤319中的一条明细数据。
[0058]优选地,所述from部分为查询数据时所需的数据来源表信息;
[0059]所述where部分为查询数据时的限制条件;
[0060]所述select部分为最终所要展示的列信息。
[0061]使用本发明的有益效果在于:该方法通过界面配置可生成对数据库表进行按条件分列处理的视图(子查询),可以作为报表开发系统的前置处理装置,避免了开发人员去处理复杂的查询和数据整理,易于修改和维护。
【专利附图】

【附图说明】
[0062]下面根据附图和实施例对本发明作进一步详细说明。
[0063]图1示出了根据本发明的一个实施例的生成报表的流程图;
[0064]图2示出了根据本发明的一个实施例的生成子查询的流程图;
[0065]图3示出了根据本发明的一个实施例的生成子查询的流程图。
【具体实施方式】
[0066]为更进一步阐述本发明为达成预定发明目的所采取的技术手段及功效,以下结合附图及较佳实施例,对依据本发明提出的一种可配置的解析多值匹配字段的方法其【具体实施方式】、特征及其功效,详细说明如后。在下述说明中,不同的“一实施例”或“实施例”指的不一定是同一实施例。此外,一或多个实施例中的特定特征、结构、或特点可由任何合适形式组合。
[0067]图1示出了根据本发明的一个实施例的生成报表的流程图,结合项目实例“贷款明细情况”报表进行流程描述,“贷款明细情况”报表用于将数据库表“贷款合同表”、“合同执行情况表”的信息进行展现,其中“贷款合同表”和“合同执行情况表”为一对多关系。“贷款合同表”包含合同编号、开始日期、终止日期、借款人、利率、币种等基本信息,“合同执行情况表”包含摘要(放本金、还本金等)、放款金额、还款金额、业务日期等信息。“贷款明细情况”报表展现的内容包括合同编号、摘要、放款金额、还款金额等。
[0068]步骤101,开始。
[0069]步骤102,通过数据字典提取业务表信息供展示,选择报表所需数据库表信息:在“贷款明细情况”报表项目实例中,选择“贷款合同表”和“合同执行情况表”。
[0070]步骤103,设置表的连接关系,所述连接关系为将一张表的一行与另一张表的一行或多行关联起来所需满足的条件。连接关系将被转化为具体的sql语句片段用于提取过滤数据。在“贷款明细情况”报表项目实例中,可将连接关系设置为“合同执行情况表”的“合同主键”列等于“贷款合同表”的“主键”列。设置过滤条件,所述过滤条件为进一步筛选数据的表达式。过滤条件也将其转化成具体的sql语句片段用于过滤数据。在“贷款明细情况”报表项目实例中,过滤条件可以设置为“贷款合同表”的“币种”列等于人民币类型的常量值,从而非人民币类型的合同将被过滤掉。
[0071]步骤104,选择所需字段用于报表展示。为方便选择,可以提供步骤102中所选择选择的数据库表的所有字段信息,供选择。未被选择的字段在将被隐藏处理。例如,在“贷款明细情况”报表项目实例中,选择了 “合同编号”、“摘要”、“放款金额”、“还款金额”等字段。
[0072]步骤105,结束。
[0073]如果对于“贷款明细情况”报表,需要将“放款金额”分成“本年放款金额”和“年前放款金额”两列进行显示,即“合同执行情况表”的“业务日期”在本年的,“放款金额”字段展示在报表“本年放款金额”列,在年前的,展示在“年前放款金额”列,“还款金额”相应地分成“本年还款金额”和“年前还款金额”两列。现有的常规配置方法无法生成满足需求的报表。
[0074]图2示出了根据本发明的一个实施例的生成子查询的流程图。结合“贷款明细情况”报表需要获得进行了分列处理,已经包含“本年放款金额”、“年前放款金额”、“本年还款金额”和“年前还款金额”四列的视图的需求,即生成“合同执行情况表”的分列处理视图或子查询)进行流程描述。
[0075]步骤201,开始;
[0076]步骤202,选择待分列字段所在数据库表,待分列字段即用于按条件拆分成多列展示的数据库原字段:在生成“合同执行情况表”的分列处理视图或子查询项目实例中,选择待分列字段“放款金额”、“还款金额”所在数据库表“合同执行情况表”。
[0077]步骤203,判断条件判断字段和待分列字段是否都位于同一数据库表:在生成“合同执行情况表”的分列处理视图或子查询项目实例中,条件判断字段为“业务日期”,和待分列字段“放款金额”、“还款金额”都位于“合同执行情况表”。
[0078]如果判断为否,继续执行步骤204,选择判断字段所在数据库表:在生成“合同执行情况表”的分列处理视图或子查询项目实例中,如果需要“贷款合同表”的某些字段作为条件判断字段,则需要选择“贷款合同表”。
[0079]步骤205,设置连接关系:在生成“合同执行情况表”的分列处理视图或子查询项目实例中,如果需要“贷款合同表”的某些字段作为条件判断字段,则需要设置“合同执行情况表”和“贷款合同表”的连接关系。
[0080]步骤206,设置过滤条件:在生成“合同执行情况表”的分列处理视图或子查询项目实例中,通过“业务日期”过滤条件查询最近5年内数据,避免数据量太大对效率产生影响。
[0081]步骤207,设置条件分列明细:在生成“合同执行情况表”的分列处理视图或子查询项目实例中,针对“放款金额”列拆分成“本年放款金额”、“年前放款金额”两列展示,需要设置以下条件分列明细:当“业务日期”在本年内,“本年放款金额”取值“放款金额”,“年前放款金额”取值O ;当“业务日期”在年前,“本年放款金额”取值0,“年前放款金额”取值“放款金额”。
[0082]步骤208,输出视图或子查询sql:通过上面设置的表信息、连接关系、过滤条件和条件分列明细,可以获取拼接视图或子查询sql所有元素。在步骤203中,如果判断的结果为是,则直接跳转到步骤206:因为条件判断字段和待分列字段都位于同一数据库表,只需一张表信息,不需要选择其他表,从而也不需要设置连接关系。
[0083]步骤209,结束。[0084]图3示出了根据本发明的一个实施例的配置生成子查询的流程图。
[0085]步骤301,开始。
[0086]步骤302,通过查询数据库数据字典,获取数据库系统业务表信息供选择:在生成“合同执行情况表”的分列处理视图或子查询项目实例中,“合同执行情况表”、“贷款合同表”和其他所有业务相关表信息都会被获取并展示以供选择。
[0087]步骤303,获取选择设置信息:在生成“合同执行情况表”的分列处理视图或子查询项目实例中,获取到选择的“合同执行情况表”和设置的“是否主表”信息,主表即待分列字段所在表。
[0088]步骤304,判断选择的表是否待分列字段所在表:在生成“合同执行情况表”的分列处理视图或子查询项目实例中,选择的“合同执行情况表”是待分列字段所在表。
[0089]如果步骤304中判断结果为“是”,则执行步骤305,将选择的表标记为主表:在生成“合同执行情况表”的分列处理视图或子查询项目实例中,“合同执行情况表”被标记为主表。
[0090]如果步骤304中判断结果为“否”,则执行步骤306,将选择的表标记为子表:在生成“合同执行情况表”的分列处理视图或子查询项目实例中,如果需要“贷款合同表”的某些字段作为条件判断字段,则需要选择“贷款合同表”,此表并不是待分列字段所在表,会被标记为子表。
[0091]步骤307,判断是否选择完成:在生成“合同执行情况表”的分列处理视图或子查询项目实例中,待分列字段和条件判断字段都位于“合同执行情况表”,故选择完成。
[0092]如果步骤307中判断结果为“否”,将会跳转到步骤302继续选择:在生成“合同执行情况表”的分列处理视图或子查询项目实例中,如果需要“贷款合同表”的某些字段作为条件判断字段,则需继续选择该表。
[0093]如果步骤307中判断结果为“是”,则执行步骤308,判断是否有且只有一张主表。
[0094]如果步骤308中判断结果为“是”,则执行步骤309,拼接生成视图(子查询)sql的from部分,from部分即查询数据时所需的数据来源表信息:在生成“合同执行情况表”的分列处理视图或子查询项目实例中,生成结果如下:
[0095]from fcloan_contract_exec fcloan_contract_exec
[0096]其中fcloan_contract_exec为“合同执行情况表”的数据库表名,如果需要“贷款合同表”的某些字段作为条件判断字段,并选择了 “贷款合同表”,则生成结果如下:
[0097]from fcloan_contract_exec fcloan_contract_exec, fcloan_contract fcloan_contract
[0098]其中fcloan_contract为“贷款合同表”的数据库表名。
[0099]如果步骤308中判断结果为“否”,则执行步骤310,删除选择的多余主表,跳转回步骤307。
[0100]步骤311,判断是否含有子表:在生成“合同执行情况表”的分列处理视图或子查询项目实例中,不含有子表。
[0101]如果步骤311中判断结果为“是”,则执行步骤312,转到连接关系设置:在生成“合同执行情况表”的分列处理视图或子查询项目实例中,如果需要“贷款合同表”的某些字段作为条件判断字段,并选择了该表,即含有子表,则需设置连接关系。[0102]步骤313,获取连接关系:在生成“合同执行情况表”的分列处理视图或子查询项目实例中,如果需要“贷款合同表”的某些字段作为条件判断字段,并选择了该表,获取的连接关系设置为“合同执行情况表”的“合同主键”列等于“贷款合同表”的“主键”列。
[0103]步骤314,判断是否设置完成。
[0104]如果步骤314中判断结果为“否”,则跳转回步骤312继续设置:如果有多个子表,需要进行该步骤完成每个子表与主表的连接关系设置。
[0105]如果步骤314中判断结果为“是”,则执行步骤315 ;如果步骤311中判断结果为“否”,直接跳转到步骤315,
[0106]步骤315,进行过滤条件设置,此步骤可以是空设置:在生成“合同执行情况表”的分列处理视图或子查询项目实例中,需设置业务日期在最近5年内的过滤条件。
[0107]步骤316,获取过滤条件:在生成“合同执行情况表”的分列处理视图或子查询项目实例中,获取的过滤条件设置为业务日期大于等于(当前年份减4年)。
[0108]步骤317,判断是否设置完成。
[0109]如果步骤317中判断结果为“否”,则跳转回步骤315继续设置。
[0110]如果步骤317中判断结果为“是”,则执行步骤318,生成视图(子查询)sql的where部分,where部分即查询数据时的限制条件:在生成“合同执行情况表”的分列处理视图或子查询项目实例中,生成结果如下:
[0111]where fcloan_contract_exec.busidate>=fiveyearago
[0112]其中fcloan_contract_exec.busidate表示“合同执行情况表”的“业务日期”字段,fiveyearago为4年前的年份表达式。
[0113]如果需要“贷款合同表”的某些字段作为条件判断字段,并选择了“贷款合同表”,设置了连接关系,则生成结果如下:
[0114]where fcloan_contract_exec.pk_contract=fcloan_contract.pk_contract
[0115]and fcloan_contract_exec.busidate>=fiveyearago
[0116]其中fcloan_contract_exec.pk_contract为“合同执行情况表”的“合同主键”列,fcloan_contract.pk_contract 为“贷款合同表”的“主键”。
[0117]步骤319,进行分列明细设置,分列明细即某一列拆分成哪些列的明细列表数据,如某一列拆分成两列,则对应两条数据:在生成“合同执行情况表”的分列处理视图或子查询项目实例中,“放款金额”拆分成“本年放款金额”和“年前放款金额”两列,“还款金额”拆分成“本年还款金额”和“年前还款金额”两列,需对应四条数据。
[0118]步骤320,进行条件判断设置,条件判断即某一列拆分出一列的详细条件判断等信息,每一次完整的条件判断设置可生成步骤319中提到的一条明细数据:在生成“合同执行情况表”的分列处理视图或子查询项目实例中,“放款金额”拆分出“本年放款金额”列,需进行具体的条件判断设置。
[0119]步骤321,获取拆分列、输出列、输出默认值信息:在生成“合同执行情况表”的分列处理视图或子查询项目实例中,“放款金额”拆分出“本年放款金额”列,获取的拆分列、输出列、输出默认值信息为拆分列fcloan_contract_exec.payamount (“合同执行情况表”的“放款金额”字段)、输出列payyear (本年放款金额)、输出默认值O。
[0120]步骤322,生成case when语句的then、else和end as部分:在生成“合同执行情况表”的分列处理视图或子查询项目实例中,“放款金额”拆分出“本年放款金额”列,生成结果如下:
[0121]

then

fcloan_contract_exec.pa> amount

else

0,00000000

end as payyear
[0122]步骤323,获取条件列判断明细信息:在生成“合同执行情况表”的分列处理视图或子查询项目实例中,“放款金额”拆分出“本年放款金额”列,获取的条件列判断明细信息为业务日期在本年内。
[0123]步骤324,生成case when语句的when部分:在生成“合同执行情况表”的分列处理视图或子查询项目实例中,“放款金额”拆分出“本年放款金额”列,生成结果如下:
[0124]when fcloan_contract_exec.busidate>=' year'
[0125]其中year为当前年份的表达式。
[0126]步骤325,生成完整的case when条件判断sql片段:在生成“合同执行情况表”的
分列处理视图或子查询项目实例中,“放款金额”拆分出“本年放款金额”列,生成结果如下:
[0127]

ease

when I c I oanc ο n Irac lex cc.busidatc >= 'year' then
Icloancontractcxcc.payamount
else
0.00000000
end as payyear
[0128]步骤326,判断是否设置完成:在生成“合同执行情况表”的分列处理视图或子查询项目实例中,还需设置“放款金额”拆分出“年前放款金额”列、“还款金额”拆分出“本年还款金额”列、“还款金额”拆分出“年前还款金额”列的条件判断等信息,故设置未完成。
[0129]如果步骤326中判断结果为“否”,则跳转回步骤319继续设置:在生成“合同执行情况表”的分列处理视图或 子查询项目实例中,继续设置剩余分列信息。
[0130]如果步骤326中判断结果为“是”,则执行步骤327,生成select部分,select部分即最终要展示的列信息:在生成“合同执行情况表”的分列处理视图或子查询项目实例中,生成结果如下:
[0131]
【权利要求】
1.一种通过用户配置生成子查询的方法,其特征在于: 步骤201,开始; 步骤202,选择待分列字段所在数据库表; 步骤203,判断条件判断字段和待分列字段是否都位于同一数据库表; 如果判断为否,继续执行步骤204 ; 步骤204,选择判断字段所在数据库表; 步骤205,设置连接关系,所述连接关系为将一张表的一行与另一张表的一行或多行关联起来所需满足的条件; 步骤206,设置过滤条件,所述过滤条件为筛选数据的表达式; 步骤207,设置条件分列明细; 步骤208,输出 所生成的子查询; 步骤209,结束。
2.如权利要求1所述的方法,其特征在于: 在步骤203中,如果判断的结果为是,则直接跳转执行步骤206。
3.如权利要求1或2所述的方法,其特征在于: 所述步骤202,选择待分列字段所在数据库表;步骤203,判断条件判断字段和待分列字段是否都位于同一数据库表;如果判断为否,继续执行步骤204 ;步骤204,选择判断字段所在数据库表;进一步包括, 步骤302,通过查询数据库数据字典,获取数据库系统业务表信息供选择; 步骤303,获取选择设置信息; 步骤304,判断选择的表是否待分列字段所在表; 如果步骤304中判断结果为“是”,则执行步骤305,将选择的表标记为主表; 如果步骤304中判断结果为“否”,则执行步骤306,将选择的表标记为子表; 步骤307,判断是否选择完成; 如果步骤307中判断结果为“否”,将会跳转到步骤302继续选择; 如果步骤307中判断结果为“是”,则执行步骤308,判断是否有且只有一张主表; 如果步骤308中判断结果为“是”,则执行步骤309,拼接生成子查询sql的from部分; 如果步骤308中判断结果为“否”,则执行步骤310,删除选择的多余主表,跳转回步骤307 ; 步骤311,判断是否含有子表; 如果步骤311中判断结果为“是”,则执行步骤312。
4.如权利要求3所述的方法,其特征在于: 所述步骤205设置连接关系,所述连接关系为将一张表的一行与另一张表的一行或多行关联起来所需满足的条件,进一步包括步骤312,转到连接关系设置; 步骤313,获取连接关系; 步骤314,判断是否设置完成; 如果步骤314中判断结果为“否”,则跳转回步骤312继续设置; 如果步骤314中判断结果为“是”,则执行步骤315。
5.如权利要求4所述的方法,其特征在于: 所述步骤206,设置过滤条件,所述过滤条件为筛选数据的表达式,进一步包括, 步骤315,进行过滤条件设置; 步骤316,获取过滤条件; 步骤317,判断是否设置完成; 如果步骤317中判断结果为“否”,则跳转回步骤315继续设置; 如果步骤317中判断结果为“是”,则执行步骤318,生成视图(子查询)sql的where部分。
6.如权利要求5所述的方法,其特征在于: 所述步骤207,设置条件分列明细,进一步包括, 步骤319,进行分列明细设置; 步骤320,进行条件判断设置; 步骤321,获取拆分列、输出列、输出默认值信息; 步骤322,生成case when语句的then、else和end as部分; 步骤323,获取条件列判断明细信息; 步骤324,生成case when语句的when部分; 步骤325,生成完整的case when条件判断sql片段; 步骤326,判断是否设置完成; 如果步骤326中判断结果为“否”,则跳转回步骤319继续设置; 如果步骤326中判断结果为“是”,则执行步骤327,生成select部分。
7.如权利要求6所述的方法,其特征在于: 所述步骤208,输出所生成的子查询,进一步包括, 步骤328,将上述select部分、from部分、where部分进行拼接子查询sql输出。
8.如权利要求7所述的方法,其特征在于: 如果步骤311中判断结果为“否”,直接跳转到步骤315,进行过滤条件设置。
9.如权利要求8所述的方法,其特征在于: 在所述步骤320,进行条件判断设置,进一步包括, 每一次完整的条件判断设置都将生成步骤319中的一条明细数据。
10.如权利要求9所述的方法,其特征在于: 所述from部分为查询数据时所需的数据来源表信息; 所述where部分为查询数据时的限制条件; 所述select部分为最终所要展示的列信息。
【文档编号】G06F17/24GK103646096SQ201310701518
【公开日】2014年3月19日 申请日期:2013年12月18日 优先权日:2013年12月18日
【发明者】高铁牛 申请人:用友软件股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1