ORACLE程式設計的套路 結果集實現按匹配度優先

2021-07-11 21:49:15 字數 1685 閱讀 1152

謂按匹配度優先?打個比方,一款輪胎商品僅適用於奧迪a6l的車,而另一款充氣幫浦則適用於所有品牌的車。

當我們篩選適用於奧迪a6l的商品時,專屬於奧迪的商品和適用於所有品牌的商品都應該符合條件,

但專屬商品應該優先排列靠前,因為其匹配度高。

(1)用2個結果集,對應2個檢視,第1個檢視靠前,結果集按專屬條件篩選;第2個檢視靠後,結果集按通用條件篩選。

(2)用1個結果集,對應1個檢視,結果集內專屬條件篩選靠前,通用條件篩選靠後。

本文即從思路(2)著手。

v_sql := 'select id,brand,productname,description,tags,image,types,score

from (

select rownum rn, tt.*

from (

select *

from (

select id,brand,productname,description,tags,image,types,score

from (

select t1.id,brand,t1.productname,t1.description,t1.tags,t1.image,t1.types,

(to_number(nvl(t1.orderno,0.00))*1

+999999 ) score

from yck_promotion_bb t1

where '||v_where_carmodel||'

order by (to_number(nvl(t1.orderno,0.00))*1

+999999 ) desc

) where rownum <='||v_end||'

union

select id,brand,productname,description,tags,image,types,score

from (

select t1.id,brand,t1.productname,t1.description,t1.tags,t1.image,t1.types,

(to_number(nvl(t1.orderno,0.00))*1 ) score

from yck_promotion_bb t1

where (carmodel like ''%'||c_all_car||'%'')

order by (to_number(nvl(t1.orderno,0.00))*1 ) desc

) where rownum <='||v_end||'

order by score desc

) where rownum <= ('||v_end||'*2) order by score desc'||'

) tt where rownum <= '||v_end||'

) where rn > '||v_start;

沒錯,**使用了動態拼湊sql**的方式,其中用到的union來合併結果集。

其中使用乙個虛構列score來排序合併後的結果集。

(1)專屬搜尋結果集的score加了999999,而通用結果集沒有新增。

(2)注意分頁的處理:專屬結果集和通用結果集都篩選乙個分頁的記錄,合併排序後,

再從最多2個分頁(考慮重複的記錄會合併)的結果集中篩選1個分頁的記錄。

Oracle塊程式設計返回結果集詳解

在oracle塊程式設計 begin系列 中,由於其不支援select from 返回結果集的形式,因此就只能通過輸出引數的形式返回結果。游標作為一種將結果集封裝成以指標單調向下讀取資料的結構,類似於只有出隊並刪除操作的佇列,正好作為輸出引數的型別。而為了使用這種方式,必須保證儲存過程的引數在宣告與...

oracle 構造結果集

做報表有時資料沒有關聯關係,需要構造一列來做為關聯關係,這時可以做乙個臨時表或者構造乙個結果集。臨時表就說了。下面說下如果資料量大怎麼在excel裡做乙個結果集 構造方式是這個 select 50637333 way no 紅河金平縣 way name,w00 way code from dual ...

ORACLE查詢結果集的問題

現在需要乙個這樣的效果,有三張表abc 其中a和b是單獨的實體表。c表是一關係表,裡面有a和b的id以及別的。可以通過a和b的id查詢出需要的值 現在需要這樣乙個查詢效果,即以a為橫座標 b為縱座標。從表c根據對應ab值查出來的結果作為單元格。不知道怎麼寫了。求方案。要的結果集大概如下 a1 a2 ...