2014-10-17 111 views
2

我有這樣的查詢:分區忽略一些列

ROW_NUMBER() OVER (PARTITION BY (NUMB) ORDER BY MY_COL2) AS row_number

這將非常依賴於NUMB變量同樣設定值。 我實際上需要跳過某些列的分配,其中MY_COL3 LIKE 'exclude'

是否有一種簡單的方法可以將它合併到上面的邏輯中?

因爲如果沒有,我要創建兩個單獨的查詢和一個查詢中使用上面的分配,並做好相互之間並無任何分配(以排除),然後聯合兩個查詢。問題是,這是非常耗費時間和大量的查詢和我想避免它......尋找,如果有一個速戰速決...

更多細節:

這個現在是什麼查詢會(簡化的)的基礎上NUMB = 4: ROW NUMBER | USER | TEXT | STATUS | 1 | Bill | blah1 | GOOD 1 | Bill | blah2 | Exclude 2 | Jack | blah3 | GOOD 2 | Jack | blah4 | Exclude 3 | Will | blah5 | GOOD 3 | Will | blah6 | Exclude 4 | Andy | blah7 | GOOD 4 | Andy | blah8 | GOOD 這是我想: ROW NUMBER | USER | TEXT | STATUS | 1 | Bill | blah1 | GOOD | Bill | blah2 | Exclude 1 | Jack | blah3 | GOOD | Jack | blah4 | Exclude 2 | Will | blah5 | GOOD | Will | blah6 | Exclude 3 | Andy | blah7 | GOOD 4 | Andy | blah8 | GOOD

+2

你的問題不明確。你不是要分區的時候'MY_COL3像exclude',或不希望生成ROW_NUMBER,還是其他什麼東西? – Andrew 2014-10-17 17:03:58

+0

你能不能從一個子查詢'那裏MY_COL3 NOT LIKE「exclude''選擇?如果不是,爲什麼? – 9000 2014-10-17 17:23:22

回答

0

行可以通過使用兩個case語句被排除的行號。第一個創建兩個單獨的partition by,一個用於排除的行,另一個用於您關心的行的一個 。外case然後顯示空值被排除的行。

select 
    case 
     when status = 'Exclude' then 
      null 
     else 
      row_number() over 
      (
       partition by case when status = 'Exclude' then 0 else 1 end 
       order by numb 
      ) 
    end new_rownumber, 
    data.* 
from 
(
    select 1 numb, 'Bill' name, 'blah1' text, 'GOOD' status from dual union all 
    select 1 numb, 'Bill' name, 'blah2' text, 'Exclude' status from dual union all 
    select 2 numb, 'Jack' name, 'blah3' text, 'GOOD' status from dual union all 
    select 2 numb, 'Jack' name, 'blah4' text, 'Exclude' status from dual union all 
    select 3 numb, 'Will' name, 'blah5' text, 'GOOD' status from dual union all 
    select 3 numb, 'Will' name, 'blah6' text, 'Exclude' status from dual union all 
    select 4 numb, 'Andy' name, 'blah7' text, 'GOOD' status from dual union all 
    select 4 numb, 'Andy' name, 'blah8' text, 'GOOD' status from dual 
) data 
order by numb, status desc; 

結果並不完全匹配。該示例對新行號使用兩次 - 是一個錯誤?

NEW_ROWNUMBER NUMB NAME TEST STATUS 
------------- ---- ---- ---- ------ 
1    1  Bill blah1 GOOD 
       1  Bill blah2 Exclude 
2    2  Jack blah3 GOOD 
       2  Jack blah4 Exclude 
3    3  Will blah5 GOOD 
       3  Will blah6 Exclude 
5    4  Andy blah7 GOOD 
4    4  Andy blah8 GOOD