帆軟報表(finereport)使用row_number ()進行組內排序
阿新 • • 發佈:2019-04-22
課程表 decimal () port 分享 values 順序 repo info <order_by_clause>:確定將 ROW_NUMBER 值分配給分區中的行的順序。
返回類型:bigint 。
ROW_NUMBER()函數將針對SELECT語句返回的每一行,從1開始編號,賦予其連續的編號。在查詢時應用了一個排序標準後,只有通過編號才能夠保證其順序是一致的,當使用ROW_NUMBER函數時,也需要專門一列用於預先排序以便於進行編號。
ROW_NUMBER()
說明:返回結果集分區內行的序列號,每個分區的第一行從1開始。
語法:ROW_NUMBER () OVER ([ <partition_by_clause> ] <order_by_clause>) 。
備註:ORDER BY 子句可確定在特定分區中為行分配唯一 ROW_NUMBER 的順序。
參數:<partition_by_clause> :將 FROM 子句生成的結果集劃入應用了 ROW_NUMBER 函數的分區。
返回類型:bigint 。
======================================================================
此次實現的是Finereport中根據學生各科成績進行各科成績的排名
準備數據:
create table grade --班級表 ( gno INT, --編號 gradeName VARCHAR(100) --班級名稱 ) go insert into grade values(1901,‘Z-19001‘), (1902,‘Z-19002‘), (1903,‘Z-19003‘) go create table course --課程表 ( cno INT,--課程編號 cname VARCHAR(100), --課程名稱 tno INT --教師編號 ) go insert into course values(1,‘微積分‘,804), (2,‘計算機導論‘,801), (3,‘計算機編程‘,802), (4,‘python爬蟲‘,803), (5,‘HTML5‘,805) go create table student --學生表 ( sno INT, --學生編號 sname VARCHAR(100),--學生姓名 ssex VARCHAR(100),--學生性別 sbirthday VARCHAR(100),--學生生日 gno INT --班級編號 ) go insert into student values(1001,‘張三‘,‘男‘,‘1998-12-11‘,1901), (1002,‘張山‘,‘男‘,‘1999-11-11‘,1901), (1003,‘張三豐‘,‘男‘,‘1978-09-19‘,1901), (1004,‘lily‘,‘女‘,‘1988-11-01‘,1902), (1005,‘candy‘,‘女‘,‘1989-03-12‘,1902), (1006,‘Tom‘,‘男‘,‘1992-05-28‘,1902), (1007,‘Jack‘,‘男‘,‘1994-04-13‘,1903), (1008,‘mark‘,‘男‘,‘1996-06-06‘,1903), (1009,‘shary‘,‘女‘,‘1997-06-08‘,1903) go create table score --分數表 ( sno INT, --學生編號 cno INT, --課程編號 degree decimal(10,2) --分數 ) go insert into score values(1001,1,‘92‘), (1001,2,‘95.5‘), (1001,3,‘89.5‘), (1002,2,‘92‘), (1002,3,‘65.5‘), (1002,5,‘92.2‘), (1003,3,‘88‘), (1003,4,‘66‘), (1003,5,‘76‘), (1004,1,‘93‘), (1004,2,‘96‘), (1004,5,‘78‘) go
執行組內排序:
SELECT s.sname,s.sno,g.gradeName,c.cname,o.degree,row_number() over(partition by cname order by degree desc) as 排名 FROM student s inner join dbo.grade g on s.gno=g.gno inner join dbo.score o on o.sno=s.sno inner join dbo.course c on c.cno=o.cno
※※ over(partition by cname order by degree desc) 按照degree排序進行累計,order by是個默認的開窗函數,按照cname分區
查詢結果:
報表展示結果:
帆軟報表(finereport)使用row_number ()進行組內排序