首页 > 代码库 > QlikView中实现SQL Server中的RowNumber() Over(Partition by)
QlikView中实现SQL Server中的RowNumber() Over(Partition by)
经常有这样的需求,当A字段有很多重复的值,但是B字段中的值在按A字段分组后是唯一的,因此SELECT A, B字段的时候不知道取B字段中的哪个值,因此在A字段重复的时候想取B字段的值,需要根据C字段中最大最小的值所对应的那一行数据。
在SQL Server 里面可以用如下方式实现,Row_Number() Over(Partition by A Order by C) ID,然后取ID=1。
在QlikView中可以用如下方式实现:
数据准备如下:
Sales:LOAD Num(SalesManID) as SalesManID, Num(ManagerID) as ManagerID, Date(Date) as DateInline [SalesManID, ManagerID, Date21, 190, 2013-05-0621, 201, 2014-05-0622, 652, 2013-05-0623, 813, 2013-05-0623, 915, 2014-01-0623, 961, 2014-05-06];
Sales表中SalesManID是销售员ID, 在不同时期SalesManID对应不同的ManagerID,按照需求应该取得销售员最近所属的ManagerID。
SaleHierarchy:LOAD SalesManID, If(Peek("SalesManID")=SalesManID, Peek("RowNumber") + 1, 1) as RowNumber, ManagerID, DateResident SalesOrder By SalesManID, Date desc;DROP Table Sales;
备注:一定要Order By SalesManID和Date两个字段。
如上图所示,取RowNumber=1就是想要的结果。
因此代码可以写成这样:
SaleHierarchy:LOAD SalesManID, If(Peek("SalesManID")=SalesManID, Peek("RowNumber") + 1, 1) as RowNumber, ManagerID, DateResident SalesWhere If(Peek("SalesManID")=SalesManID, Peek("RowNumber") + 1, 1)=1Order By SalesManID, Date desc;DROP Table Sales;
假如不清楚如何使用Peek请看帮助或留言交流。
QlikView中实现SQL Server中的RowNumber() Over(Partition by)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。