何
謂按匹配度優先?打個比方,一款輪胎商品僅適用於奧迪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 ...