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 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请看帮助或留言交流。

时间: 2024-10-11 10:21:50

QlikView中实现SQL Server中的RowNumber() Over(Partition by)的相关文章

SQL Server中的SQL语句优化与效率

很多人不知道SQL语句在SQL SERVER中是如何执行的,他们担心自己所写的SQL语句会被SQL SERVER误解.比如: select * from table1 where name='zhangsan' and tID > 10000 和执行: select * from table1 where tID > 10000 and name='zhangsan' 一些人不知道以上两条语句的执行效率是否一样,因为如果简单的从语句先后上看,这两个语句的确是不一样,如果tID是一个聚合索引,那

删除sql server中重复的数据

原文:删除sql server中重复的数据 with list_numbers as( select Name, AuthorOrTime, Url, Price, EstimatePrice, Size, Category, ROW_NUMBER() over (order by Name, AuthorOrTime, Url, Price, EstimatePrice, Size, Category) as 'rownumber' from Arts)delete list_numbers

SQL Server 中的窗口函数(2012 新函数)

简介 SQL Server 2012之后对窗口函数进行了极大的加强,但对于很多开发人员来说,对窗口函数却不甚了解,导致了这样强大的功能被浪费,因此本篇文章主要谈一谈SQL Server中窗口函数的概念. 什么是窗口函数 窗口函数,也可以被称为OLAP函数或分析函数.理解窗口函数可以从理解聚合函数开始,我们知道聚合函数的概念,就是将某列多行中的值按照聚合规则合并为一行,比如说Sum.AVG等等,简单的概念如图1所示. 图1.聚合函数 因此,通常来说,聚合后的行数都要小于聚合前的行数.而对于窗口函数

SQL安装过程中“针对SQL Server 注册表的一致性验证“出错解决方式

1.打开注册表,查找到[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib\0804],分别打开Counter 和Help 2.打开Counter,把滚动条拉倒最后,然后记下最大的那个值(不同计算机不一样的),记下后关闭窗口 3.同样的打开Help,滚动到最后记最大的那个值(你们的值不一定跟我一样的哦!!!),记下后关闭窗口 4,再重新定位到Perflib的节点上, 5.双击Last Counter然后在

Oracle 和SQL server中数据备份与恢复

Oracle 侧 创建一个表,将现有表数据导入其中. create Table  TB_NYU_TENDERTBL_BAK   as  select *  from  TB_NYU_TENDERTBL  where  1=1 删除原来表内容. DELETE  FROM TB_NYU_TENDERTBL 恢复表的内容 insert  into TB_NYU_TENDERTBL  select  * from  TB_NYU_TENDERTBL_BAK SQL server侧 select  * i

从算法入手讲解如何在SQL Server中实现最优最简

算法是计算机科学中一个重要的研究方向,是解决复杂问题的关键.在计算机世界中,算法无处不在.数据库是存储数据和执行大批量计算的场所,在数据库中使用一些简单的SQL命令,进行存储.查询.统计.以解决现实世界中的问题已经是屡见不鲜.随着数据量的大幅度增加和业务规则的日益复杂,越来越需要一种专门的方法来满足效率和准确性方面的要求.如何把解决问题的复杂算法转换为数据库能够执行的命令,也是数据库应用技术研究的一个方面.本文以MSSQL中的命令来阐述例子. 数据库中可以存储实体的数据集合,在进行运算时,数据库

SQL Server中授予用户查看对象定义的权限

  在SQL Server中,有时候需要给一些登录名(用户)授予查看所有或部分对象(存储过程.函数.视图.表)的定义权限存.如果是部分存储过程.函数.视图授予查看定义的权限,那么就像下面脚本所示,比较繁琐: GRANT VIEW DEFINITION ON  YOUR_PROCEDURE TO   USERNAME; GRANT VIEW DEFINITION ON  YOUR_FUNCTION TO USERNAME; GRANT VIEW DEFINITION ON  YOUR_VIEW T

在wamp中安装sql server驱动的步骤方法

在wamp中安装sql server驱动的方法 配置php+sql server 连接方式,配置成功才能远程访问数据库. PHP自带的MSSQL扩展php_mssql.dll是给SQL Server 2000用的 要使用SQL Server 2005以上版本,就要用到微软为PHP提供的最新第三方扩展SQL Server Driver for PHP才行. 以下是安装的步骤:(前提条件,在wamp安装正确的情况下,图标是粉红色的,打开运行后变成绿色就是正常的) 第一步.下载SQL Server D

SQL Server中的执行引擎入门

简介 当查询优化器(Query Optimizer)将T-SQL语句解析后并从执行计划中选择最低消耗的执行计划后,具体的执行就会交由执行引擎(Execution Engine)来进行执行.本文旨在分类讲述执行计划中每一种操作的相关信息. 数据访问操作 首先最基本的操作就是访问数据.这既可以通过直接访问表,也可以通过访问索引来进行.表内数据的组织方式分为堆(Heap)和B树,其中表中没有建立聚集索引时数据是通过堆进行组织的,这个是无序的,表中建立聚集索引后和非聚集索引的数据都是以B树方式进行组织,