学习使用PIVOT
来源:互联网 发布:dede游戏网站源码 编辑:程序博客网 时间:2024/06/04 19:23
假设有这样的一个需求:
有一个表中存储了某个部门的各个员工的每一年的各类薪金,
记录存储格式如:
员工姓名 薪金数目 薪金种类 年份
现在要求根据员工的姓名进行查询,查询出某些员工各个年份的薪金总数,出来的结果要求
ColumnName: 年份 员工1姓名 员工2姓名 ...
ColumnValue: 年份 薪金总数 薪金总数
这个时候使用PIVOT来进行将行转换了列,操作就变得很方便,而由于PIVOT是静态的列,所以要使其起到动态的效果,只有用SQL拼接的方法实现,如
- -- Test Data
- IF OBJECT_ID('TEMPDB..#T_Money') IS NOT NULL
- BEGIN
- DROP TABLE #T_Money
- PRINT 'Drop Complate.'
- END
- Create Table #T_Money
- (
- [ID] INT NULL,
- [Name] NVARCHAR(256) NULL,
- [Money] Money NULL,
- [Type] NVARCHAR(128) NULL,
- [Year] INT NULL
- );
- INSERT INTO #T_Money VALUES(1,N'小斌',15000,N'月薪',2007);
- INSERT INTO #T_Money VALUES(2,N'小斌',5000,N'奖金',2007);
- INSERT INTO #T_Money VALUES(3,N'小斌',20000,N'月薪',2008);
- INSERT INTO #T_Money VALUES(4,N'小斌',10000,N'奖金',2008);
- INSERT INTO #T_Money VALUES(5,N'小珍',5000,N'月薪',2007);
- INSERT INTO #T_Money VALUES(6,N'小珍',5000,N'奖金',2007);
- INSERT INTO #T_Money VALUES(7,N'小珍',10000,N'月薪',2008);
- INSERT INTO #T_Money VALUES(8,N'小珍',5000,N'奖金',2008);
- -- Unite SQL
- DECLARE @Names AS NVARCHAR(2048);
- WITH T_NAMES AS
- (
- SELECT DISTINCT
- [Name]
- FROM
- #T_Money
- )
- SELECT
- @Names = ISNULL(@Names + N',[', '[' )
- + CAST(Name AS NVARCHAR(256))
- + ']'
- FROM
- T_NAMES
- WHERE
- Name LIKE N'%斌%';
- PRINT @Names;
- DECLARE @SQL NVARCHAR(MAX);
- SET @SQL = N'
- SELECT
- *
- FROM
- (
- SELECT
- [Name]
- ,[Money]
- ,[Year]
- FROM
- #T_Money
- ) AS Tmp_PIV
- PIVOT
- (
- SUM(Money)
- FOR [Name] IN (' + @Names + ')
- ) AS Tmp_Money
- Order By
- Year';
- PRINT @SQL;
- EXEC sp_executesql @SQL;
结果如:
- 学习使用PIVOT
- PIVOT使用
- pivot使用
- 使用 PIVOT 和 UNPIVOT
- 使用 PIVOT 和 UNPIVOT
- 使用 PIVOT 和 UNPIVOT
- SQL SERVER PIVOT使用
- PIVOT
- pivot
- PIVOT
- pivot
- unpivot,pivot联合使用示例
- sqlserver中pivot的使用
- 使用 PIVOT 和 UNPIVOT 行转列
- PIVOT和UNPIVOT使用详解
- sqlserver PIVOT和UNPIVOT使用
- PIVOT和UNPIVOT使用详解
- Solr的学习使用之(七)Solr高级查询facet、facet.pivot简介 - OnTheRoad_Lee
- windows延缓写入失败的处理
- JavaCC学习心得(一)
- 在Flex项目中使用Flash媒体组件播放视频
- 定义云计算市场
- 关于g_object_get_data和g_object_set_data
- 学习使用PIVOT
- Javascript实现日期的联动选择代码
- 最新liux下tomcat5.5.25+mysql5.0.45+jdk1.0.5.13+eclipse3.3.1+myeclipse6.0配置
- 后海北京小吃价格一览表(不全)
- 关于SQL Server 2000在Window 2003 Server中端口打不开的问题
- 世界500强企业员工的15种美德 之八:激情
- 使用struts实现文件下载
- 0911周四
- 常用的正则