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

yizhihongxing

要实现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查询某个列中的最大值?

    以下是如何使用Python查询某个列中的最大值的完整使用攻略。 步骤1:导入模块 在Python中,我们需要导入相应的模块来连接数据库和执行查询操作。以下是导入mysql-connector-python模块的基本语法: import mysql.connector 以下是导入psycopg2模块的基本语法: import psycopg2 步骤2:连接数据…

    python 2023年5月12日
    00
  • 深入SQL Server 跨数据库查询的详解

    深入SQL Server 跨数据库查询的详解 SQL Server 支持跨数据库查询,即可以在一个数据库中使用另一个数据库中的表和视图。本文将详细介绍跨数据库查询的基本语法,注意事项,以及使用示例。 基本语法 跨数据库查询的语法格式为: SELECT * FROM DATABASE_NAME.SCHEMA_NAME.TABLE_NAME 其中,DATABAS…

    database 2023年5月21日
    00
  • PHP连接和操作MySQL数据库基础教程

    以下是“PHP连接和操作MySQL数据库基础教程”的完整攻略。 一、链接MySQL数据库 首先,在PHP中连接MySQL数据库需要用到mysqli扩展,我们可以使用以下代码进行链接: // 配置信息 $host = ‘localhost’; // 数据库服务器 $port = 3306; // 数据库端口 $user = ‘root’; // 数据库用户名 …

    database 2023年5月21日
    00
  • MSSQL 检查所使用的语句是否符合标准

    要检查 MSSQL 所使用的语句是否符合标准,需要使用一些工具和技巧。下面是一些步骤和示例: 步骤 安装 SQL Server Management Studio (SSMS) 打开 SSMS 并连接到要检查的 MSSQL 数据库 打开新查询窗口并输入要检查的 T-SQL 语句 在查询窗口中使用 SSMS 提供的语法检查功能查看是否符合标准 手动查看语句是否…

    database 2023年5月21日
    00
  • 详细讲解PostgreSQL中的全文搜索的用法

    PostgreSQL中的全文搜索 PostgreSQL是一款强大的开源数据库,它除了支持传统的数据库功能之外,还支持全文搜索。这意味着,我们可以在表的某个字段中进行文本搜索,并高效地返回匹配的结果。 步骤 要使用全文搜索功能,我们需要做以下几个步骤: 安装pg_trgm扩展。pg_trgm是PostgreSQL的一个文本搜索扩展,提供了元音间距离算法和n-g…

    database 2023年5月19日
    00
  • HIVE配置mysql metastore

    HIVE配置mysql metastore    hive中除了保存真正的数据以外还要额外保存用来描述库、表、数据的数据,称为hive的元数据。这些元数据又存放在何处呢?    如果不修改配置hive默认使用内置的derby数据库存储元数据。    derby是apache开发的基于java的文件型数据库。    可以检查之前执行命令的目录,会发现其中产生了…

    MySQL 2023年4月13日
    00
  • 高版本Mysql使用group by分组报错的解决方案

    下面是详细的“高版本MySQL使用GROUP BY分组报错的解决方案”攻略。 问题描述 在高版本的MySQL(如MySQL5.7、MySQL8.0)中,对数据进行分组时,可能会出现以下报错信息: Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated …

    database 2023年5月18日
    00
  • SpringBoot中Mybatis + Druid 数据访问的详细过程

    下面是SpringBoot中Mybatis + Druid数据访问的详细步骤: 1. 添加依赖 在pom.xml文件中引入Mybatis和Druid的依赖,如下: <dependencies> <!– Mybatis依赖 –> <dependency> <groupId>org.mybatis.spring…

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