2012-10-02 135 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使用视图。