SQL Server数据库纵向转横向

以一张薪资表为例,表结构如下:

2010040914130623.jpg

表结构中,每个员工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 '

 

得到如下结果:

2010040914142312.jpg

需要将上述查询结果显示为一行,则使用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

 

 结果为:

2010040914160633.jpg

以上为记录笔记,无他用。

转载于:https://www.cnblogs.com/Jason_zhu/archive/2010/04/09/1708287.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值