如下图,是一个证券公司的经纪人提成,提成方案由经纪人签约的时候和营业部商讨,所以整个公司下来,提成分段方式会有多种,但是一般营业部会坚持一定原则,保证不使分段方式出现过多的情况。
现在我所在的项目组,要替换之前厂商的老系统,老系统给每个人都写一套提成分段方式,到了新系统,我们规划整理出不同的提成分段方式,然后每个人去对应相应的分段方式,减少数据的冗余。现在想统计出多少中分段方式,但是想了许久想不出统计sql,求助大神帮忙。

解决方案 »

  1.   

    select count(distinct fd) from 
    (select 经纪人编码,WMSYS.WM_CONCAT(分段上限-分段下限) fd
    from tab
    group by 经纪人编码);
    可以先考虑把每个经纪人的分段上下线合并成一行,再来处理
      

  2.   

    我考虑过这种方式,但是会不会出现这样的情况行转列曾经碰到这样的情况
    name    X
    A            1
    A            2
    A            3
    B            1
    B            2
    B            3 
    WM_CONCAT(X) 对于A 来说  存的 是 123,对于B来说存的是312 之类的数据
      

  3.   

    你要固定排序就用listagg,还可以更精确点把对应比例字段也合并。在输出中列出来select count(distinct fd||fd1) from 
    (select 经纪人编码,listagg(分段上限-分段下限) within group(order by 分段上限-分段下限) fd,
            listagg(对应比例) within group(order by 对应比例) fd1
    from tab
    group by 经纪人编码);