计算分区集中的列

时间:2015-04-19 03:28:38

标签: sql db2

我的表ROLE由4列组成,Comid,Memberid,Houseid和Membertype。在houseid中有多个成员类型,其元素类型为HEAD或MEM,但是作为HEAD的成员也将拥有另一个记录,其中他是MEM,其后是MEM类型的其他成员。我的要求是在Houseid上对表进行分区,并为每个成员提供一个排名情况0为membertype HEAD,case 1为membertype MEM等等,但是一个HEAD的成员最终得到两个排名0和1,我只需要给他排名第0,并以1,2,3等排在其他成员之后,一个HOUSEID中只能有1个HEAD。这是我尝试但没有成功

select Comid, Memberid, Houseid, Membertype,
       rank() over (partition by Houseid, case when MEMBERTYPE 'HEAD' then 0 else 1 end)
from ROLE 

我的查询有效,但MEMBERTYPE ='HEAD'最终得到两个等级0和1,我只想为HEAD排名0并排除他所在的记录。

1 个答案:

答案 0 :(得分:0)

您需要不同级别的窗口功能。第一个为家庭头部的所有行分配“HEAD”。第二个是rank()

select Comid, Memberid, Houseid, Membertype,
       rank() over (partition by Houseid order by isHead, memberid) as seqnum
from (select r.*,
             max(case when membertype = 'HEAD' then 1 else 0 end) over (partition by HouseId) as isHead
      from ROLE r
     ) r;