交叉报表的实现

需求描述

客户希望实现展现每个人最新的5个合同,如果数量不足则空白显示,报表样式为,

需求实现

第一步,利用RANK()函数从数据库取出对应的数据,sql为,

select * from (

SELECT a.人名,

a.合同编号,

a.合同起始时间,

a.合同截止时间,

RANK() OVER(PARTITION BY 人名 ORDER BY 合同编号) Rank

FROM table a

)tt

where tt.Rank<=5

第二步,设计报表如下,

 

预览即是需求中的效果。

附Rank说明:

Rank的基本语法为:

RANK ( ) OVER ( [query_partition_clause] order_by_clause )

例子:

有表Table内容如下

COL1 COL2

1 1

2 1

3 2

3 1

4 1

4 2

5 2

5 2

6 2

分析功能:列出Col2分组后根据Col1排序,并生成数字列。比较实用于在成绩表中查出各科前几名的信息。

SELECT a.*,RANK() OVER(PARTITION BY col2 ORDER BY col1) “Rank” FROM table a;

结果如下:

COL1 COL2 Rank

1 1 1

2 1 2

3 1 3

4 1 4

3 2 1

4 2 2

5 2 3

5 2 3

6 2 5

热门文章