2012-10-02 93 views
3

我有一個基於基本條件的查詢,它將在任何給定日期返回X個記錄。根據結果計數拆分查詢結果

我想檢查基本查詢的結果,然後根據X的總數對其應用百分比拆分,然後將其拆分到2個存儲桶中。每個桶將是總查詢結果的比例在十

返回例如:

  • 查詢返回3500條記錄。

  • 如果從查詢返回的記錄數< = 3000,然後分裂的3500只記錄到40%/ 60%分割(1,400/2100)。

  • 如果從查詢A返回的記錄數大於等於3001,< = 50,000,則將記錄拆分成10%/ 90%的split.Etc。等等

  • 我想要返回的實際記錄,而不僅僅是數學作用於記錄,它返回一行中的數字(在列中)。

回答

4

我不知道你怎麼想顯示的結果集行的不同部分,所以我剛剛在包含價值1表明該行的結果集的行增加額外的列(part)屬於第一部分和2 - 第二部分。

select z.* 
    , case 
     when cnt_all <= 3000 and cnt <= 40 
     then 1 
     when (cnt_all between 3001 and 50000) and (cnt <= 10) 
     then 1 
     else 2 
     end part 
    from (select t.* 
      , 100*(count(col1) over(order by col1)/count(col1) over())cnt 
      , count(col1) over() cnt_all 
     from split_rowset t 
     order by col1 
     ) z 

Demo #1數量的行3000。 Demo #2數量的行3500。

的爲了更好的可用性則可以使用上面的查詢創建視圖,然後通過柱part查詢該視圖濾波。

Demo #3使用視圖。