在开发系统维护阶段,经常需要进行各种数据统计,各种报表之类的。
这个时候,行数据转数据显示就发挥作用了。
场景:行数据的某列值想作为字段列显示
1、效果如下
2、解决方案
使用pivot进行行转列,以及结合分组
1)什么是pivot
PIVOT用于将列值旋转为列名(即行转列),在SQL Server 2000可以用聚合函数配合CASE语句,以前旧版本实现起来比较麻烦,随着版本的升级逐渐出现了一些比较实用的方式
实现PIVOT的一般语法是:PIVOT(聚合函数(列) FOR 列 in (…) )AS P
2)聚合函数配合使用
3、代码如下
从代码可看到,列标题,必须是已知需要显示的标题
select * from(
select DeptName,InputCode
from FWD_Department
group by DeptName,InputCode
) as a
pivot(
max(InputCode) for DeptName in([随访中心],[全院],[家庭化产房],[妇科二],妇科一)
) piv
- 创建表
表创建三个字段,自增编号、名称、以及编码
CREATE TABLE [dbo].[FWD_Department](
[id] [int] IDENTITY(1,1) NOT NULL,
[DeptName] [varchar](50) NOT NULL,
[InputCode] [nchar](10) NULL,
CONSTRAINT [PK_one] PRIMARY KEY CLUSTERED
(
[DeptName] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
- 表记录添加
下面添加记录的方式,就是简单的一条一条的添加
insert into one(DeptName,InputCode)
values('随访中心','SFZX')
insert into one(DeptName,InputCode)
values('全院','QY')
insert into one(DeptName,InputCode)
values('家庭化产房','JTHCF')
insert into one(DeptName,InputCode)
values('妇科二','FKE')
insert into one(DeptName,InputCode)
values('妇科一','FKY')
- 改进记录添加方式
insert into FWD_Department(DeptName,InputCode)
values('随访中心','SFZX'),
('全院','QY'),
('家庭化产房','JTHCF'),
('妇科二','FKE'),
('妇科一','FKY')
4、常见的聚合函数
编号 | 函数 | 描述说明 |
1 | AVG | 计算平均值 |
2 | MIN | 计算最小值 |
3 | MAX | 计算最大值 |
4 | SUM | 计算总和值 |
5 | COUNT | 统计记录条数 |
6 | STDEV | 计算标准偏差值 |
7 | VAR | 计算方差 |
8 | CHECKSUM_AGG | 返回集合中值的校验和 |