⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 固定行列报表.sql

📁 这是CSDN SQL Server 版主邹建的SQL笔记
💻 SQL
字号:
--测试数据
create table test (TEST_NO varchar(10),TEST_NAME varchar(10))
insert into test select 'A0001','张三'
insert into test select 'A0003','李4'
insert into test select 'A0004','李五'
insert into test select 'B0002','王五'
insert into test select 'B0003','将李'
insert into test select 'B0004','五二'
insert into test select 'C0001','王二'
insert into test select 'C0003','邓三'
insert into test select 'C0004','刘4'
go

--查询处理的存储过程
CREATE PROC p_PageView
@tbname sysname,   --查询的表名
@KeyField sysname, --关键字段名
@SortField sysname,--排序字段名
@Columns int=10,   --每页最多显示的列数
@Rows int=10       --每页最多显示的行数
as
set nocount on
declare @s nvarchar(4000),@gid1 varchar(20),@gid2 varchar(20),@pageno varchar(20)
select @s='',
	@pageno='1+gid/'+rtrim(@Columns*@rows),
	@gid1='(gid%'+rtrim(@Columns*@rows)+')/'+rtrim(@rows),
	@gid2='(gid%'+rtrim(@Columns*@rows)+')%'+rtrim(@rows)
while @Columns>0
	select @Columns=@Columns-1,
		@s='
,isnull(max(case '+@gid1+' when '+rtrim(@Columns)+' then TEST_NO end),'''')'
		+'
,isnull(max(case '+@gid1+' when '+rtrim(@Columns)+' then TEST_NAME end),'''')'
		+@s
exec('select PageNo='+@pageno+@s+' from(
	select TEST_NO,TEST_NAME,
		gid=(select count(*) from test where TEST_NO<a.TEST_NO)
	from test a)aa
	group by '+@pageno+','+@gid2+'
	order by '+@pageno+','+@gid2)
go

--调用
exec p_PageView 'test','TEST_NO','TEST_NAME',3,2
go

--删除测试
drop table test
drop proc p_PageView

/*--结果
                                                                  
---------- ---------- ---------- ---------- ---------- ---------- 
A0001      张三         B0002      王五         C0001      王二
A0003      李4         B0003      将李         C0003      邓三
A0004      李五         B0004      五二         C0004      刘4


                                                                  
---------- ---------- ---------- ---------- ---------- ---------- 
A0001      张三         B0003      将李         C0004      刘4
A0003      李4         B0004      五二                    
A0004      李五         C0001      王二                    
B0002      王五         C0003      邓三    
--*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -