QlikView中实现SQL Server中的RowNumber() Over(Partition by)

本文详细介绍了在SQLServer和QlikView中解决数据集中多个重复项时,如何选取特定列的特定值,特别关注了如何根据另一列的值来选择正确的记录。通过实例演示了使用Row_Number()Over和Peek函数的用法,旨在为数据处理和分析提供有效解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

经常有这样的需求,当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 Date
Inline [
SalesManID, ManagerID, Date
21, 190, 2013-05-06
21, 201, 2014-05-06
22, 652, 2013-05-06
23, 813, 2013-05-06
23, 915, 2014-01-06
23, 961, 2014-05-06
];


Sales表中SalesManID是销售员ID, 在不同时期SalesManID对应不同的ManagerID,按照需求应该取得销售员最近所属的ManagerID。

SaleHierarchy:
LOAD
	SalesManID,
	If(Peek("SalesManID")=SalesManID, Peek("RowNumber") + 1, 1) as RowNumber,
	ManagerID,
	Date
Resident
	Sales
Order 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,
	Date
Resident
	Sales
Where
	If(Peek("SalesManID")=SalesManID, Peek("RowNumber") + 1, 1)=1
Order By
	SalesManID,
	Date desc;

DROP Table Sales;

 


假如不清楚如何使用Peek请看帮助或留言交流。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值