一種通過用戶配置生成子查詢的方法與裝置制造方法
【專利摘要】本發(fā)明公開了一種通過用戶配置生成子查詢的方法,所述的通過用戶配置生成子查詢的方法,該方法通過界面配置可生成對數(shù)據(jù)庫表進(jìn)行按條件分列處理的視圖或子查詢,生成的視圖或子查詢可以作為報(bào)表開發(fā)步驟“選擇報(bào)表所需數(shù)據(jù)庫表”時(shí)的特殊待選數(shù)據(jù)庫表,故該方法可以作為報(bào)表開發(fā)系統(tǒng)的前置處理裝置,避免了開發(fā)人員去處理復(fù)雜的查詢和數(shù)據(jù)整理,易于修改和維護(hù)。
【專利說明】一種通過用戶配置生成子查詢的方法與裝置
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及一種通過用戶配置生成子查詢方法,當(dāng)報(bào)表開發(fā)需要對數(shù)據(jù)庫表某一列數(shù)據(jù)按條件進(jìn)行分列展示時(shí),此方法可提供中間層的視圖或子查詢。
【背景技術(shù)】
[0002]現(xiàn)有技術(shù)中,通過選擇報(bào)表所需數(shù)據(jù)庫表,并設(shè)置數(shù)據(jù)庫表的連接關(guān)系以及其他過濾條件,從而選擇字段用于報(bào)表展示。當(dāng)報(bào)表要求對數(shù)據(jù)庫表中的某一列數(shù)據(jù)信息進(jìn)行按條件分列展示時(shí),需要開發(fā)人員在后臺開發(fā)完成查詢和處理數(shù)據(jù),增加了報(bào)表開發(fā)的復(fù)雜度。
【發(fā)明內(nèi)容】
[0003]為了克服現(xiàn)有技術(shù)中的上述不足,本發(fā)明提出了一種通過用戶配置生成子查詢的方法,當(dāng)數(shù)據(jù)庫表某一列需要按條件進(jìn)行分列報(bào)表展示時(shí),按用戶配置條件生成基于該數(shù)據(jù)庫表的視圖(子查詢),將該視圖(子查詢)作為報(bào)表開發(fā)步驟“選擇報(bào)表所需數(shù)據(jù)庫表”的特殊待選數(shù)據(jù)庫表。
[0004]為實(shí)現(xiàn)上述發(fā)明目的,本發(fā)明采用的技術(shù)方案如下:
[0005]一種通過用戶配置生成子查詢的方法,其特征在于:
[0006]步驟201,開始;
[0007]步驟202,選擇待分列字段所在數(shù)據(jù)庫表;
[0008]步驟203,判斷條件判斷字段和待分列字段是否都位于同一數(shù)據(jù)庫表;
[0009]如果判斷為否,繼續(xù)執(zhí)行步驟204 ;
[0010]步驟204,選擇判斷字段所在數(shù)據(jù)庫表;
[0011]步驟205,設(shè)置連接關(guān)系,所述連接關(guān)系為將一張表的一行與另一張表的一行或多行關(guān)聯(lián)起來所需滿足的條件;
[0012]步驟206,設(shè)置過濾條件,所述過濾條件為篩選數(shù)據(jù)的表達(dá)式;
[0013]步驟207,設(shè)置條件分列明細(xì);
[0014]步驟208,輸出所生成的子查詢;
[0015]步驟209,結(jié)束。
[0016]優(yōu)選地,在步驟203中,如果判斷的結(jié)果為是,則直接跳轉(zhuǎn)執(zhí)行步驟206。
[0017]優(yōu)選地,所述步驟202,選擇待分列字段所在數(shù)據(jù)庫表;步驟203,判斷條件判斷字段和待分列字段是否都位于同一數(shù)據(jù)庫表;如果判斷為否,繼續(xù)執(zhí)行步驟204 ;步驟204,選擇判斷字段所在數(shù)據(jù)庫表;進(jìn)一步包括,
[0018]步驟302,通過查詢數(shù)據(jù)庫數(shù)據(jù)字典,獲取數(shù)據(jù)庫系統(tǒng)業(yè)務(wù)表信息供選擇;
[0019]步驟303,獲取選擇設(shè)置信息;
[0020]步驟304,判斷選擇的表是否待分列字段所在表;
[0021]如果步驟304中判斷結(jié)果為“是”,則執(zhí)行步驟305,將選擇的表標(biāo)記為主表;[0022]如果步驟304中判斷結(jié)果為“否”,則執(zhí)行步驟306,將選擇的表標(biāo)記為子表;
[0023]步驟307,判斷是否選擇完成;
[0024]如果步驟307中判斷結(jié)果為“否”,將會跳轉(zhuǎn)到步驟302繼續(xù)選擇;
[0025]如果步驟307中判斷結(jié)果為“是”,則執(zhí)行步驟308,判斷是否有且只有一張主表;
[0026]如果步驟308中判斷結(jié)果為“是”,則執(zhí)行步驟309,拼接生成子查詢sql的from部分;
[0027]如果步驟308中判斷結(jié)果為“否”,則執(zhí)行步驟310,刪除選擇的多余主表,跳轉(zhuǎn)回步驟307 ;
[0028]步驟311,判斷是否含有子表;
[0029]如果步驟311中判斷結(jié)果為“是”,則執(zhí)行步驟312。
[0030]優(yōu)選地,所述步驟205設(shè)置連接關(guān)系,所述連接關(guān)系為將一張表的一行與另一張表的一行或多行關(guān)聯(lián)起來所需滿足的條件,進(jìn)一步包括
[0031]步驟312,轉(zhuǎn)到連接關(guān)系設(shè)置;
[0032]步驟313,獲取連接關(guān)系;
[0033]步驟314,判斷是否設(shè)置完成;
[0034]如果步驟314中判斷結(jié)果為“否”,則跳轉(zhuǎn)回步驟312繼續(xù)設(shè)置;
[0035]如果步驟314中判斷結(jié)果為“是”,則執(zhí)行步驟315。
[0036]優(yōu)選地,所述步驟206,設(shè)置過濾條件,所述過濾條件為篩選數(shù)據(jù)的表達(dá)式,進(jìn)一步包括,
[0037]步驟315,進(jìn)行過濾條件設(shè)置;
[0038]步驟316,獲取過濾條件;
[0039]步驟317,判斷是否設(shè)置完成;
[0040]如果步驟317中判斷結(jié)果為“否”,則跳轉(zhuǎn)回步驟315繼續(xù)設(shè)置;
[0041]如果步驟317中判斷結(jié)果為“是”,則執(zhí)行步驟318,生成視圖(子查詢)sql的where部分。
[0042]優(yōu)選地,所述步驟207,設(shè)置條件分列明細(xì),進(jìn)一步包括,
[0043]步驟319,進(jìn)行分列明細(xì)設(shè)置;
[0044]步驟320,進(jìn)行條件判斷設(shè)置;
[0045]步驟321,獲取拆分列、輸出列、輸出默認(rèn)值信息;
[0046]步驟322,生成 case when 語句的 then、else 和 end as 部分;
[0047]步驟323,獲取條件列判斷明細(xì)信息;
[0048]步驟324,生成case when語句的when部分;
[0049]步驟325,生成完整的case when條件判斷sql片段;
[0050]步驟326,判斷是否設(shè)置完成;
[0051]如果步驟326中判斷結(jié)果為“否”,則跳轉(zhuǎn)回步驟319繼續(xù)設(shè)置;
[0052]如果步驟326中判斷結(jié)果為“是”,則執(zhí)行步驟327,生成select部分。
[0053]優(yōu)選地,所述步驟208,輸出所生成的子查詢,進(jìn)一步包括,
[0054]步驟328,將上述select部分、from部分、where部分進(jìn)行拼接子查詢sql輸出。
[0055]優(yōu)選地,如果步驟311中判斷結(jié)果為“否”,直接跳轉(zhuǎn)到步驟315,進(jìn)行過濾條件設(shè)置;
[0056]優(yōu)選地,在所述步驟320,進(jìn)行條件判斷設(shè)置,進(jìn)一步包括,
[0057]每一次完整的條件判斷設(shè)置都將生成步驟319中的一條明細(xì)數(shù)據(jù)。
[0058]優(yōu)選地,所述from部分為查詢數(shù)據(jù)時(shí)所需的數(shù)據(jù)來源表信息;
[0059]所述where部分為查詢數(shù)據(jù)時(shí)的限制條件;
[0060]所述select部分為最終所要展示的列信息。
[0061]使用本發(fā)明的有益效果在于:該方法通過界面配置可生成對數(shù)據(jù)庫表進(jìn)行按條件分列處理的視圖(子查詢),可以作為報(bào)表開發(fā)系統(tǒng)的前置處理裝置,避免了開發(fā)人員去處理復(fù)雜的查詢和數(shù)據(jù)整理,易于修改和維護(hù)。
【專利附圖】
【附圖說明】
[0062]下面根據(jù)附圖和實(shí)施例對本發(fā)明作進(jìn)一步詳細(xì)說明。
[0063]圖1示出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的生成報(bào)表的流程圖;
[0064]圖2示出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的生成子查詢的流程圖;
[0065]圖3示出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的生成子查詢的流程圖。
【具體實(shí)施方式】
[0066]為更進(jìn)一步闡述本發(fā)明為達(dá)成預(yù)定發(fā)明目的所采取的技術(shù)手段及功效,以下結(jié)合附圖及較佳實(shí)施例,對依據(jù)本發(fā)明提出的一種可配置的解析多值匹配字段的方法其【具體實(shí)施方式】、特征及其功效,詳細(xì)說明如后。在下述說明中,不同的“一實(shí)施例”或“實(shí)施例”指的不一定是同一實(shí)施例。此外,一或多個(gè)實(shí)施例中的特定特征、結(jié)構(gòu)、或特點(diǎn)可由任何合適形式組合。
[0067]圖1示出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的生成報(bào)表的流程圖,結(jié)合項(xiàng)目實(shí)例“貸款明細(xì)情況”報(bào)表進(jìn)行流程描述,“貸款明細(xì)情況”報(bào)表用于將數(shù)據(jù)庫表“貸款合同表”、“合同執(zhí)行情況表”的信息進(jìn)行展現(xiàn),其中“貸款合同表”和“合同執(zhí)行情況表”為一對多關(guān)系。“貸款合同表”包含合同編號、開始日期、終止日期、借款人、利率、幣種等基本信息,“合同執(zhí)行情況表”包含摘要(放本金、還本金等)、放款金額、還款金額、業(yè)務(wù)日期等信息。“貸款明細(xì)情況”報(bào)表展現(xiàn)的內(nèi)容包括合同編號、摘要、放款金額、還款金額等。
[0068]步驟101,開始。
[0069]步驟102,通過數(shù)據(jù)字典提取業(yè)務(wù)表信息供展示,選擇報(bào)表所需數(shù)據(jù)庫表信息:在“貸款明細(xì)情況”報(bào)表項(xiàng)目實(shí)例中,選擇“貸款合同表”和“合同執(zhí)行情況表”。
[0070]步驟103,設(shè)置表的連接關(guān)系,所述連接關(guān)系為將一張表的一行與另一張表的一行或多行關(guān)聯(lián)起來所需滿足的條件。連接關(guān)系將被轉(zhuǎn)化為具體的sql語句片段用于提取過濾數(shù)據(jù)。在“貸款明細(xì)情況”報(bào)表項(xiàng)目實(shí)例中,可將連接關(guān)系設(shè)置為“合同執(zhí)行情況表”的“合同主鍵”列等于“貸款合同表”的“主鍵”列。設(shè)置過濾條件,所述過濾條件為進(jìn)一步篩選數(shù)據(jù)的表達(dá)式。過濾條件也將其轉(zhuǎn)化成具體的sql語句片段用于過濾數(shù)據(jù)。在“貸款明細(xì)情況”報(bào)表項(xiàng)目實(shí)例中,過濾條件可以設(shè)置為“貸款合同表”的“幣種”列等于人民幣類型的常量值,從而非人民幣類型的合同將被過濾掉。
[0071]步驟104,選擇所需字段用于報(bào)表展示。為方便選擇,可以提供步驟102中所選擇選擇的數(shù)據(jù)庫表的所有字段信息,供選擇。未被選擇的字段在將被隱藏處理。例如,在“貸款明細(xì)情況”報(bào)表項(xiàng)目實(shí)例中,選擇了 “合同編號”、“摘要”、“放款金額”、“還款金額”等字段。
[0072]步驟105,結(jié)束。
[0073]如果對于“貸款明細(xì)情況”報(bào)表,需要將“放款金額”分成“本年放款金額”和“年前放款金額”兩列進(jìn)行顯示,即“合同執(zhí)行情況表”的“業(yè)務(wù)日期”在本年的,“放款金額”字段展示在報(bào)表“本年放款金額”列,在年前的,展示在“年前放款金額”列,“還款金額”相應(yīng)地分成“本年還款金額”和“年前還款金額”兩列?,F(xiàn)有的常規(guī)配置方法無法生成滿足需求的報(bào)表。
[0074]圖2示出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的生成子查詢的流程圖。結(jié)合“貸款明細(xì)情況”報(bào)表需要獲得進(jìn)行了分列處理,已經(jīng)包含“本年放款金額”、“年前放款金額”、“本年還款金額”和“年前還款金額”四列的視圖的需求,即生成“合同執(zhí)行情況表”的分列處理視圖或子查詢)進(jìn)行流程描述。
[0075]步驟201,開始;
[0076]步驟202,選擇待分列字段所在數(shù)據(jù)庫表,待分列字段即用于按條件拆分成多列展示的數(shù)據(jù)庫原字段:在生成“合同執(zhí)行情況表”的分列處理視圖或子查詢項(xiàng)目實(shí)例中,選擇待分列字段“放款金額”、“還款金額”所在數(shù)據(jù)庫表“合同執(zhí)行情況表”。
[0077]步驟203,判斷條件判斷字段和待分列字段是否都位于同一數(shù)據(jù)庫表:在生成“合同執(zhí)行情況表”的分列處理視圖或子查詢項(xiàng)目實(shí)例中,條件判斷字段為“業(yè)務(wù)日期”,和待分列字段“放款金額”、“還款金額”都位于“合同執(zhí)行情況表”。
[0078]如果判斷為否,繼續(xù)執(zhí)行步驟204,選擇判斷字段所在數(shù)據(jù)庫表:在生成“合同執(zhí)行情況表”的分列處理視圖或子查詢項(xiàng)目實(shí)例中,如果需要“貸款合同表”的某些字段作為條件判斷字段,則需要選擇“貸款合同表”。
[0079]步驟205,設(shè)置連接關(guān)系:在生成“合同執(zhí)行情況表”的分列處理視圖或子查詢項(xiàng)目實(shí)例中,如果需要“貸款合同表”的某些字段作為條件判斷字段,則需要設(shè)置“合同執(zhí)行情況表”和“貸款合同表”的連接關(guān)系。
[0080]步驟206,設(shè)置過濾條件:在生成“合同執(zhí)行情況表”的分列處理視圖或子查詢項(xiàng)目實(shí)例中,通過“業(yè)務(wù)日期”過濾條件查詢最近5年內(nèi)數(shù)據(jù),避免數(shù)據(jù)量太大對效率產(chǎn)生影響。
[0081]步驟207,設(shè)置條件分列明細(xì):在生成“合同執(zhí)行情況表”的分列處理視圖或子查詢項(xiàng)目實(shí)例中,針對“放款金額”列拆分成“本年放款金額”、“年前放款金額”兩列展示,需要設(shè)置以下條件分列明細(xì):當(dāng)“業(yè)務(wù)日期”在本年內(nèi),“本年放款金額”取值“放款金額”,“年前放款金額”取值O ;當(dāng)“業(yè)務(wù)日期”在年前,“本年放款金額”取值0,“年前放款金額”取值“放款金額”。
[0082]步驟208,輸出視圖或子查詢sql:通過上面設(shè)置的表信息、連接關(guān)系、過濾條件和條件分列明細(xì),可以獲取拼接視圖或子查詢sql所有元素。在步驟203中,如果判斷的結(jié)果為是,則直接跳轉(zhuǎn)到步驟206:因?yàn)闂l件判斷字段和待分列字段都位于同一數(shù)據(jù)庫表,只需一張表信息,不需要選擇其他表,從而也不需要設(shè)置連接關(guān)系。
[0083]步驟209,結(jié)束。[0084]圖3示出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的配置生成子查詢的流程圖。
[0085]步驟301,開始。
[0086]步驟302,通過查詢數(shù)據(jù)庫數(shù)據(jù)字典,獲取數(shù)據(jù)庫系統(tǒng)業(yè)務(wù)表信息供選擇:在生成“合同執(zhí)行情況表”的分列處理視圖或子查詢項(xiàng)目實(shí)例中,“合同執(zhí)行情況表”、“貸款合同表”和其他所有業(yè)務(wù)相關(guān)表信息都會被獲取并展示以供選擇。
[0087]步驟303,獲取選擇設(shè)置信息:在生成“合同執(zhí)行情況表”的分列處理視圖或子查詢項(xiàng)目實(shí)例中,獲取到選擇的“合同執(zhí)行情況表”和設(shè)置的“是否主表”信息,主表即待分列字段所在表。
[0088]步驟304,判斷選擇的表是否待分列字段所在表:在生成“合同執(zhí)行情況表”的分列處理視圖或子查詢項(xiàng)目實(shí)例中,選擇的“合同執(zhí)行情況表”是待分列字段所在表。
[0089]如果步驟304中判斷結(jié)果為“是”,則執(zhí)行步驟305,將選擇的表標(biāo)記為主表:在生成“合同執(zhí)行情況表”的分列處理視圖或子查詢項(xiàng)目實(shí)例中,“合同執(zhí)行情況表”被標(biāo)記為主表。
[0090]如果步驟304中判斷結(jié)果為“否”,則執(zhí)行步驟306,將選擇的表標(biāo)記為子表:在生成“合同執(zhí)行情況表”的分列處理視圖或子查詢項(xiàng)目實(shí)例中,如果需要“貸款合同表”的某些字段作為條件判斷字段,則需要選擇“貸款合同表”,此表并不是待分列字段所在表,會被標(biāo)記為子表。
[0091]步驟307,判斷是否選擇完成:在生成“合同執(zhí)行情況表”的分列處理視圖或子查詢項(xiàng)目實(shí)例中,待分列字段和條件判斷字段都位于“合同執(zhí)行情況表”,故選擇完成。
[0092]如果步驟307中判斷結(jié)果為“否”,將會跳轉(zhuǎn)到步驟302繼續(xù)選擇:在生成“合同執(zhí)行情況表”的分列處理視圖或子查詢項(xiàng)目實(shí)例中,如果需要“貸款合同表”的某些字段作為條件判斷字段,則需繼續(xù)選擇該表。
[0093]如果步驟307中判斷結(jié)果為“是”,則執(zhí)行步驟308,判斷是否有且只有一張主表。
[0094]如果步驟308中判斷結(jié)果為“是”,則執(zhí)行步驟309,拼接生成視圖(子查詢)sql的from部分,from部分即查詢數(shù)據(jù)時(shí)所需的數(shù)據(jù)來源表信息:在生成“合同執(zhí)行情況表”的分列處理視圖或子查詢項(xiàng)目實(shí)例中,生成結(jié)果如下:
[0095]from fcloan_contract_exec fcloan_contract_exec
[0096]其中fcloan_contract_exec為“合同執(zhí)行情況表”的數(shù)據(jù)庫表名,如果需要“貸款合同表”的某些字段作為條件判斷字段,并選擇了 “貸款合同表”,則生成結(jié)果如下:
[0097]from fcloan_contract_exec fcloan_contract_exec, fcloan_contract fcloan_contract
[0098]其中fcloan_contract為“貸款合同表”的數(shù)據(jù)庫表名。
[0099]如果步驟308中判斷結(jié)果為“否”,則執(zhí)行步驟310,刪除選擇的多余主表,跳轉(zhuǎn)回步驟307。
[0100]步驟311,判斷是否含有子表:在生成“合同執(zhí)行情況表”的分列處理視圖或子查詢項(xiàng)目實(shí)例中,不含有子表。
[0101]如果步驟311中判斷結(jié)果為“是”,則執(zhí)行步驟312,轉(zhuǎn)到連接關(guān)系設(shè)置:在生成“合同執(zhí)行情況表”的分列處理視圖或子查詢項(xiàng)目實(shí)例中,如果需要“貸款合同表”的某些字段作為條件判斷字段,并選擇了該表,即含有子表,則需設(shè)置連接關(guān)系。[0102]步驟313,獲取連接關(guān)系:在生成“合同執(zhí)行情況表”的分列處理視圖或子查詢項(xiàng)目實(shí)例中,如果需要“貸款合同表”的某些字段作為條件判斷字段,并選擇了該表,獲取的連接關(guān)系設(shè)置為“合同執(zhí)行情況表”的“合同主鍵”列等于“貸款合同表”的“主鍵”列。
[0103]步驟314,判斷是否設(shè)置完成。
[0104]如果步驟314中判斷結(jié)果為“否”,則跳轉(zhuǎn)回步驟312繼續(xù)設(shè)置:如果有多個(gè)子表,需要進(jìn)行該步驟完成每個(gè)子表與主表的連接關(guān)系設(shè)置。
[0105]如果步驟314中判斷結(jié)果為“是”,則執(zhí)行步驟315 ;如果步驟311中判斷結(jié)果為“否”,直接跳轉(zhuǎn)到步驟315,
[0106]步驟315,進(jìn)行過濾條件設(shè)置,此步驟可以是空設(shè)置:在生成“合同執(zhí)行情況表”的分列處理視圖或子查詢項(xiàng)目實(shí)例中,需設(shè)置業(yè)務(wù)日期在最近5年內(nèi)的過濾條件。
[0107]步驟316,獲取過濾條件:在生成“合同執(zhí)行情況表”的分列處理視圖或子查詢項(xiàng)目實(shí)例中,獲取的過濾條件設(shè)置為業(yè)務(wù)日期大于等于(當(dāng)前年份減4年)。
[0108]步驟317,判斷是否設(shè)置完成。
[0109]如果步驟317中判斷結(jié)果為“否”,則跳轉(zhuǎn)回步驟315繼續(xù)設(shè)置。
[0110]如果步驟317中判斷結(jié)果為“是”,則執(zhí)行步驟318,生成視圖(子查詢)sql的where部分,where部分即查詢數(shù)據(jù)時(shí)的限制條件:在生成“合同執(zhí)行情況表”的分列處理視圖或子查詢項(xiàng)目實(shí)例中,生成結(jié)果如下:
[0111]where fcloan_contract_exec.busidate>=fiveyearago
[0112]其中fcloan_contract_exec.busidate表示“合同執(zhí)行情況表”的“業(yè)務(wù)日期”字段,fiveyearago為4年前的年份表達(dá)式。
[0113]如果需要“貸款合同表”的某些字段作為條件判斷字段,并選擇了“貸款合同表”,設(shè)置了連接關(guān)系,則生成結(jié)果如下:
[0114]where fcloan_contract_exec.pk_contract=fcloan_contract.pk_contract
[0115]and fcloan_contract_exec.busidate>=fiveyearago
[0116]其中fcloan_contract_exec.pk_contract為“合同執(zhí)行情況表”的“合同主鍵”列,fcloan_contract.pk_contract 為“貸款合同表”的“主鍵”。
[0117]步驟319,進(jìn)行分列明細(xì)設(shè)置,分列明細(xì)即某一列拆分成哪些列的明細(xì)列表數(shù)據(jù),如某一列拆分成兩列,則對應(yīng)兩條數(shù)據(jù):在生成“合同執(zhí)行情況表”的分列處理視圖或子查詢項(xiàng)目實(shí)例中,“放款金額”拆分成“本年放款金額”和“年前放款金額”兩列,“還款金額”拆分成“本年還款金額”和“年前還款金額”兩列,需對應(yīng)四條數(shù)據(jù)。
[0118]步驟320,進(jìn)行條件判斷設(shè)置,條件判斷即某一列拆分出一列的詳細(xì)條件判斷等信息,每一次完整的條件判斷設(shè)置可生成步驟319中提到的一條明細(xì)數(shù)據(jù):在生成“合同執(zhí)行情況表”的分列處理視圖或子查詢項(xiàng)目實(shí)例中,“放款金額”拆分出“本年放款金額”列,需進(jìn)行具體的條件判斷設(shè)置。
[0119]步驟321,獲取拆分列、輸出列、輸出默認(rèn)值信息:在生成“合同執(zhí)行情況表”的分列處理視圖或子查詢項(xiàng)目實(shí)例中,“放款金額”拆分出“本年放款金額”列,獲取的拆分列、輸出列、輸出默認(rèn)值信息為拆分列fcloan_contract_exec.payamount (“合同執(zhí)行情況表”的“放款金額”字段)、輸出列payyear (本年放款金額)、輸出默認(rèn)值O。
[0120]步驟322,生成case when語句的then、else和end as部分:在生成“合同執(zhí)行情況表”的分列處理視圖或子查詢項(xiàng)目實(shí)例中,“放款金額”拆分出“本年放款金額”列,生成結(jié)果如下:
[0121]
then
fcloan_contract_exec.pa> amount
else
0,00000000
end as payyear
[0122]步驟323,獲取條件列判斷明細(xì)信息:在生成“合同執(zhí)行情況表”的分列處理視圖或子查詢項(xiàng)目實(shí)例中,“放款金額”拆分出“本年放款金額”列,獲取的條件列判斷明細(xì)信息為業(yè)務(wù)日期在本年內(nèi)。
[0123]步驟324,生成case when語句的when部分:在生成“合同執(zhí)行情況表”的分列處理視圖或子查詢項(xiàng)目實(shí)例中,“放款金額”拆分出“本年放款金額”列,生成結(jié)果如下:
[0124]when fcloan_contract_exec.busidate>=' year'
[0125]其中year為當(dāng)前年份的表達(dá)式。
[0126]步驟325,生成完整的case when條件判斷sql片段:在生成“合同執(zhí)行情況表”的
分列處理視圖或子查詢項(xiàng)目實(shí)例中,“放款金額”拆分出“本年放款金額”列,生成結(jié)果如下:
[0127]
ease
when I c I oanc ο n Irac lex cc.busidatc >= 'year' then
Icloancontractcxcc.payamount
else
0.00000000
end as payyear
[0128]步驟326,判斷是否設(shè)置完成:在生成“合同執(zhí)行情況表”的分列處理視圖或子查詢項(xiàng)目實(shí)例中,還需設(shè)置“放款金額”拆分出“年前放款金額”列、“還款金額”拆分出“本年還款金額”列、“還款金額”拆分出“年前還款金額”列的條件判斷等信息,故設(shè)置未完成。
[0129]如果步驟326中判斷結(jié)果為“否”,則跳轉(zhuǎn)回步驟319繼續(xù)設(shè)置:在生成“合同執(zhí)行情況表”的分列處理視圖或 子查詢項(xiàng)目實(shí)例中,繼續(xù)設(shè)置剩余分列信息。
[0130]如果步驟326中判斷結(jié)果為“是”,則執(zhí)行步驟327,生成select部分,select部分即最終要展示的列信息:在生成“合同執(zhí)行情況表”的分列處理視圖或子查詢項(xiàng)目實(shí)例中,生成結(jié)果如下:
[0131]
【權(quán)利要求】
1.一種通過用戶配置生成子查詢的方法,其特征在于: 步驟201,開始; 步驟202,選擇待分列字段所在數(shù)據(jù)庫表; 步驟203,判斷條件判斷字段和待分列字段是否都位于同一數(shù)據(jù)庫表; 如果判斷為否,繼續(xù)執(zhí)行步驟204 ; 步驟204,選擇判斷字段所在數(shù)據(jù)庫表; 步驟205,設(shè)置連接關(guān)系,所述連接關(guān)系為將一張表的一行與另一張表的一行或多行關(guān)聯(lián)起來所需滿足的條件; 步驟206,設(shè)置過濾條件,所述過濾條件為篩選數(shù)據(jù)的表達(dá)式; 步驟207,設(shè)置條件分列明細(xì); 步驟208,輸出 所生成的子查詢; 步驟209,結(jié)束。
2.如權(quán)利要求1所述的方法,其特征在于: 在步驟203中,如果判斷的結(jié)果為是,則直接跳轉(zhuǎn)執(zhí)行步驟206。
3.如權(quán)利要求1或2所述的方法,其特征在于: 所述步驟202,選擇待分列字段所在數(shù)據(jù)庫表;步驟203,判斷條件判斷字段和待分列字段是否都位于同一數(shù)據(jù)庫表;如果判斷為否,繼續(xù)執(zhí)行步驟204 ;步驟204,選擇判斷字段所在數(shù)據(jù)庫表;進(jìn)一步包括, 步驟302,通過查詢數(shù)據(jù)庫數(shù)據(jù)字典,獲取數(shù)據(jù)庫系統(tǒng)業(yè)務(wù)表信息供選擇; 步驟303,獲取選擇設(shè)置信息; 步驟304,判斷選擇的表是否待分列字段所在表; 如果步驟304中判斷結(jié)果為“是”,則執(zhí)行步驟305,將選擇的表標(biāo)記為主表; 如果步驟304中判斷結(jié)果為“否”,則執(zhí)行步驟306,將選擇的表標(biāo)記為子表; 步驟307,判斷是否選擇完成; 如果步驟307中判斷結(jié)果為“否”,將會跳轉(zhuǎn)到步驟302繼續(xù)選擇; 如果步驟307中判斷結(jié)果為“是”,則執(zhí)行步驟308,判斷是否有且只有一張主表; 如果步驟308中判斷結(jié)果為“是”,則執(zhí)行步驟309,拼接生成子查詢sql的from部分; 如果步驟308中判斷結(jié)果為“否”,則執(zhí)行步驟310,刪除選擇的多余主表,跳轉(zhuǎn)回步驟307 ; 步驟311,判斷是否含有子表; 如果步驟311中判斷結(jié)果為“是”,則執(zhí)行步驟312。
4.如權(quán)利要求3所述的方法,其特征在于: 所述步驟205設(shè)置連接關(guān)系,所述連接關(guān)系為將一張表的一行與另一張表的一行或多行關(guān)聯(lián)起來所需滿足的條件,進(jìn)一步包括步驟312,轉(zhuǎn)到連接關(guān)系設(shè)置; 步驟313,獲取連接關(guān)系; 步驟314,判斷是否設(shè)置完成; 如果步驟314中判斷結(jié)果為“否”,則跳轉(zhuǎn)回步驟312繼續(xù)設(shè)置; 如果步驟314中判斷結(jié)果為“是”,則執(zhí)行步驟315。
5.如權(quán)利要求4所述的方法,其特征在于: 所述步驟206,設(shè)置過濾條件,所述過濾條件為篩選數(shù)據(jù)的表達(dá)式,進(jìn)一步包括, 步驟315,進(jìn)行過濾條件設(shè)置; 步驟316,獲取過濾條件; 步驟317,判斷是否設(shè)置完成; 如果步驟317中判斷結(jié)果為“否”,則跳轉(zhuǎn)回步驟315繼續(xù)設(shè)置; 如果步驟317中判斷結(jié)果為“是”,則執(zhí)行步驟318,生成視圖(子查詢)sql的where部分。
6.如權(quán)利要求5所述的方法,其特征在于: 所述步驟207,設(shè)置條件分列明細(xì),進(jìn)一步包括, 步驟319,進(jìn)行分列明細(xì)設(shè)置; 步驟320,進(jìn)行條件判斷設(shè)置; 步驟321,獲取拆分列、輸出列、輸出默認(rèn)值信息; 步驟322,生成case when語句的then、else和end as部分; 步驟323,獲取條件列判斷明細(xì)信息; 步驟324,生成case when語句的when部分; 步驟325,生成完整的case when條件判斷sql片段; 步驟326,判斷是否設(shè)置完成; 如果步驟326中判斷結(jié)果為“否”,則跳轉(zhuǎn)回步驟319繼續(xù)設(shè)置; 如果步驟326中判斷結(jié)果為“是”,則執(zhí)行步驟327,生成select部分。
7.如權(quán)利要求6所述的方法,其特征在于: 所述步驟208,輸出所生成的子查詢,進(jìn)一步包括, 步驟328,將上述select部分、from部分、where部分進(jìn)行拼接子查詢sql輸出。
8.如權(quán)利要求7所述的方法,其特征在于: 如果步驟311中判斷結(jié)果為“否”,直接跳轉(zhuǎn)到步驟315,進(jìn)行過濾條件設(shè)置。
9.如權(quán)利要求8所述的方法,其特征在于: 在所述步驟320,進(jìn)行條件判斷設(shè)置,進(jìn)一步包括, 每一次完整的條件判斷設(shè)置都將生成步驟319中的一條明細(xì)數(shù)據(jù)。
10.如權(quán)利要求9所述的方法,其特征在于: 所述from部分為查詢數(shù)據(jù)時(shí)所需的數(shù)據(jù)來源表信息; 所述where部分為查詢數(shù)據(jù)時(shí)的限制條件; 所述select部分為最終所要展示的列信息。
【文檔編號】G06F17/24GK103646096SQ201310701518
【公開日】2014年3月19日 申請日期:2013年12月18日 優(yōu)先權(quán)日:2013年12月18日
【發(fā)明者】高鐵牛 申請人:用友軟件股份有限公司