以一张薪资表为例,表结构如下:
表结构中,每个员工id对应有多个薪资项目以及金额,需要查询时转向,将每个员工的薪资项目转为横向一行显示。
在直接查询(加入一些限制条件以缩小结果集),
1 SELECT 2 ssp_pay_empid, 3 ssp_pay_sdate, 4 ssp_pay_edate, 5 ssp_pay_type, 6 ssp_pay_amount, 7 ssp_pay_item 8 FROM ssp_pay 9 where ssp_pay_empid = 00000073 and ssp_pay_type = ' RT ' and ssp_pay_item 10 IN ( ' /101 ' , ' /103 ' , ' /401 ' , ' /402 ' ) and ssp_pay_sdate = ' 2007-08-01 '
得到如下结果:
需要将上述查询结果显示为一行,则使用SQL Server 2005新增的PIVOT,通过将表达式某一列中的唯一值转换为输出中的多个列来旋转表值表达式,并在必要时对最终输出中所需的任何其余列值执行聚合。
执行如下SQL:
1 select 2 ssp_pay_empid, 3 ssp_pay_sdate, 4 ssp_pay_edate, 5 ssp_pay_type, 6 [ /101 ] , 7 [ /103 ] , 8 [ /401 ] , 9 [ /402 ] 10 from ( 11 SELECT 12 ssp_pay_empid, 13 ssp_pay_sdate, 14 ssp_pay_edate, 15 ssp_pay_type, 16 ssp_pay_amount, 17 ssp_pay_item 18 FROM ssp_pay 19 where ssp_pay_empid = 00000073 and ssp_pay_type = ' RT ' and ssp_pay_sdate = ' 2007-08-01 ' 20 ) AS SourceTable 21 PIVOT ( SUM (ssp_pay_amount) FOR ssp_pay_item 22 IN ( [ /101 ] , [ /103 ] , [ /401 ] , [ /402 ] )) AS PivotTable
结果为:
以上为记录笔记,无他用。
转载于:https://www.cnblogs.com/Jason_zhu/archive/2010/04/09/1708287.html
相关资源:数据库表中横向记录纵向显示