SQl 实现动态交叉表查询
来源:互联网 发布:全世界失眠 知乎 编辑:程序博客网 时间:2024/05/20 05:23
创建表
CREATE TABLE [dbo].[销售表](
[ID] [int] NOT NULL,
[员工姓名] [nvarchar](25) COLLATE Chinese_PRC_CI_AS NULL,
[所在部门] [nvarchar](15) COLLATE Chinese_PRC_CI_AS NULL,
[销售业绩] [int] NULL
) ON [PRIMARY]
插入数据
insert into dbo.销售表 ([ID],[员工姓名] ,[所在部门],[销售业绩]) values (1,'李*明','服装部',2)
insert into dbo.销售表 ([ID],[员工姓名] ,[所在部门],[销售业绩]) values (2,'周*人','家电部',1)
insert into dbo.销售表 ([ID],[员工姓名] ,[所在部门],[销售业绩]) values (3,'韩*','食品部',2)
insert into dbo.销售表 ([ID],[员工姓名] ,[所在部门],[销售业绩]) values (4,'韩*','食品部',2)
insert into dbo.销售表 ([ID],[员工姓名] ,[所在部门],[销售业绩]) values (5,'司*南','家电部',2)
insert into dbo.销售表 ([ID],[员工姓名] ,[所在部门],[销售业绩]) values (6,'韩*运','食品部',5)
insert into dbo.销售表 ([ID],[员工姓名] ,[所在部门],[销售业绩]) values (7,'周*人','家电部',5)
insert into dbo.销售表 ([ID],[员工姓名] ,[所在部门],[销售业绩]) values (8,'李*明','服装部',2)
insert into dbo.销售表 ([ID],[员工姓名] ,[所在部门],[销售业绩]) values (9,'史*金','食品部',5)
交叉表查询存储过程
create procedure [dbo].[Corss]
@strTabName as varchar(50) = '销售表',
@strCol as varchar(50) = '所在部门',
@strGroup as varchar(50) = '员工姓名',--分组字段
@strNumber as varchar(50) = '销售业绩', --被统计的字段
@strSum as varchar(10) = 'Sum' --运算方式
AS
DECLARE @strSql as varchar(1000), @strTmpCol as varchar(100)
EXECUTE ('DECLARE corss_cursor CURSOR FOR SELECT DISTINCT ' + @strCol + ' from ' + @strTabName + ' for read only ') --生成游标
begin
SET nocount ON
SET @strsql ='select ' + @strGroup + ', ' + @strSum + '(' + @strNumber + ') AS [' + @strNumber + ']' --查询的前半段
OPEN corss_cursor
while (0=0)
BEGIN
FETCH NEXT FROM corss_cursor --遍历游标,将列头信息放入变量@strTmpCol
INTO @strTmpCol
if (@@fetch_status<>0) break
SET @strsql = @strsql + ', ' + @strSum + '(CASE ' + @strCol + ' WHEN ''' + @strTmpCol + ''' THEN ' + @strNumber + ' ELSE Null END) AS [' + @strTmpCol + ']' --构造查询
END
SET @strsql = @strsql + ' from ' + @strTabname + ' group by ' + @strGroup --查询结尾
EXECUTE(@strsql) --执行
IF @@error <>0 RETURN @@error --如果出错,返回错误代码
CLOSE corss_cursor
DEALLOCATE corss_cursor RETURN 0 --释放游标,返回0表示成功
end
- SQl 实现动态交叉表查询
- SQL交叉表查询 如何实现
- sql 交叉表查询
- sql日记(相关子查询,动态交叉表篇)
- sql相关子查询,动态交叉表篇
- sql日记(相关子查询,动态交叉表篇)
- SQL动态交叉表
- SQL动态交叉表
- SQL实现动态交叉表【用游标实现】
- SQL 2000动态交叉表
- oracle 动态交叉查询 行列互换 oracle动态交叉表
- SQL实现表的动态查询
- 交叉表,动态SQL生成动态列
- Mysql5 实现交叉表查询
- 动态交叉表的实现
- 动态交叉表的实现
- SqlServer如何生成动态交叉表查询
- SqlServer如何生成动态交叉表查询
- 多种存储过程分页方法的速度对比
- 《JS语法字典》
- c#操作word
- C++建立多级文件目录
- 多种存储过程分页方法的速度对比
- SQl 实现动态交叉表查询
- 开始学习qt
- Flex学习--Object&&String
- asp.net中怎样写Log文件?
- SQLSERVER2005的混和身份验证模式的设置以及SA登陆问题
- Windows XP SP3下基于Cygwin的NS2安装
- abstract、virtual、override、new說明
- watij/finder/Finders classnotfoundexception
- 设置samba权限