Sql Server中实现行数据转为列显示

要实现Sql Server中行数据转为列显示,需使用Pivot语句。下面是详细步骤:

1.创建数据表,并插入实例数据

首先创建一个数据表,我们以学生表为例,表格结构如下:

CREATE TABLE student (
    id INT NOT NULL PRIMARY KEY,
    name VARCHAR(50) NOT NULL,
    sex VARCHAR(10) NOT NULL,
    score INT NOT NULL
);

INSERT INTO student VALUES
  (1, 'Jack', 'Male', 90),
  (2, 'Mary', 'Female', 85),
  (3, 'Lucy', 'Female', 95);

2.使用Pivot语句执行行数据转列显示

Pivot语句可以将行数据列出为列。下面是使用Pivot语句将学生的成绩按照不同性别显示的SQL语句:

SELECT * FROM
(
   SELECT sex, name, score 
   FROM student
) AS SourceTable
PIVOT
(
   AVG(score)
   FOR name IN ([Jack],[Mary],[Lucy])
) AS PivotTable;

上面的SQL语句中,AVG(score)是计算多个学生成绩的平均值, FOR name IN ([Jack],[Mary],[Lucy])则是指生成学生姓名为列名,分别为Jack、Mary、Lucy的三列数据。

执行上述SQL语句后,可以看到如下结果:

sex Jack Mary Lucy
Female NULL 85 95
Male 90 NULL NULL

由此可见,我们成功的将学生表的行数据转为列。

3.使用Pivot语句执行多字段行转列

除了单个字段行转列,还可以通过在Pivot语句中使用多个字段实现多字段行转列。下面的SQL语句实现了将学生表的不同性别下的最高和最低成绩转为列显示:

SELECT * FROM
(
   SELECT sex, 
          'Max' + CAST(ROW_NUMBER() OVER (PARTITION BY sex ORDER BY score DESC) AS VARCHAR) as Max,
          'Min' + CAST(ROW_NUMBER() OVER (PARTITION BY sex ORDER BY score ASC) AS VARCHAR) as Min, 
          score
   FROM student
) AS SourceTable
PIVOT
(
   AVG(score)
   FOR [Max1] IN ([Max1]), [Min1] IN ([Min1])
) AS PivotTable;

上面的SQL语句中,'Max'+CAST(ROW_NUMBER() OVER (PARTITION BY sex ORDER BY score DESC) AS VARCHAR)'Min'+CAST(ROW_NUMBER() OVER (PARTITION BY sex ORDER BY score ASC) AS VARCHAR) 表示检索性别分组计算成绩最高或最低的成绩,并用"Max"或"Min"作为字段前缀,再加上排行的数字进行重命名。

执行上面的SQL语句后,可以看到如下结果:

sex Max1 Min1
Female 95 85
Male 90 NULL

由此可见,使用Pivot语句还可以实现多字段行转列。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Sql Server中实现行数据转为列显示 - Python技术站

(0)
上一篇 2023年5月21日
下一篇 2023年5月21日

相关文章

  • python mysqldb连接数据库

    下面是关于在Python中通过MySQLdb模块连接数据库的详细攻略: 前置条件 首先,需要在本地或服务器上安装好MySQL数据库,并进行配置。相关安装教程和配置方法可以在MySQL官方网站上找到。 其次,需要在Python环境中安装MySQLdb模块。可以使用pip命令进行安装: pip install MySQL-python 安装完毕后,就可以在Pyt…

    database 2023年5月22日
    00
  • Java动态代理模式的深入揭秘

    Java动态代理模式的深入揭秘 简介 代理模式是一种常见的设计模式,其作用是代理某个对象,可以对该对象进行拦截、过滤、增强等操作。代理模式分为静态代理和动态代理两种,静态代理需要开发者手动编写代理类,比较繁琐,而动态代理则可以通过Java反射机制,在程序运行过程中动态生成代理类。本文将对Java动态代理模式进行深入的讲解。 动态代理的实现方式 Java动态代…

    database 2023年5月21日
    00
  • 第47月第25天 Executing test client: couldn’t execute “src/redis-benchmark”: no such file or directory.

    1. 一. mac下redis的安装 1. 官网http://redis.io/ 下载最新的稳定版本,这里是5.0.9 2. sudo mv 到 /usr/local/ 3. sudo tar -zxf redis-5.0.9.tar 解压文件 4. 进入解压后的目录 cd redis-5.0.9 5. sudo make test 测试编译 6. sudo…

    Redis 2023年4月16日
    00
  • redis info 详解

    查看Redis的性能状态不得不提到info。 官方文档http://redis.io/commands/info 下面简单的介绍一下info的信息:info主要有一下几项,因版本不同可能略有差别 server clients memory persistence stats replication cpu keyspace server段一般是配置以及系统项…

    Redis 2023年4月12日
    00
  • Windows服务器下MySql数据库单向主从备份详细实现步骤分享

    下面我将为您详细讲解“Windows服务器下MySql数据库单向主从备份详细实现步骤分享”的完整攻略。 步骤一:创建主从复制用户 登录mysql: mysql -u root -p 创建主从复制用户 CREATE USER ‘replicator’@’%’ IDENTIFIED BY ‘123456’; GRANT REPLICATION SLAVE ON …

    database 2023年5月21日
    00
  • 如何在Python中删除Redis数据库中的数据?

    以下是在Python中删除Redis数据库中的数据的完整使用攻略。 使用Redis数据库的前提条件 在使用Python连接Redis数据库之前,需要确保已经安装Redis数据库,并已经启动Redis,同时需要安装Python的Redis动redisy。 步骤1:导入模块 在Python中使用redis模块连接Redis数据库。以下是导入redis模块的本语法…

    python 2023年5月12日
    00
  • MySQL教程DML数据操纵语言示例详解

    MySQL教程DML数据操纵语言示例详解 介绍 本文将详细讲解MySQL的DML数据操纵语言,包含INSERT、UPDATE、DELETE等命令的使用方式以及示例说明。 INSERT命令 INSERT命令用于添加新的数据行到表中。下面是一个简单的示例: INSERT INTO customers(name, email, phone) VALUES(‘Joh…

    database 2023年5月21日
    00
  • JMeter对数据库的查询操作步骤详解

    我来详细讲解一下“JMeter对数据库的查询操作步骤详解”。 概述 在进行动态网站的性能测试中,经常需要对数据库进行查询操作,JMeter 是轻量级的性能测试工具,能够对数据库进行查询测试。 本文主要介绍以下几个步骤: 配置 JDBC 连接池 配置 JDBC 请求 配置结果断言 步骤详解 步骤一:配置 JDBC 连接池 在 JMeter 中使用 JDBC 请…

    database 2023年5月21日
    00
合作推广
合作推广
分享本页
返回顶部