`
fangbiao23
  • 浏览: 41882 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

如何实现MSSQL数据表行列转换

阅读更多

 

在做报表应用时,总是要涉及行行色色的数据操作,如题,就是一个很好的例子:

一、为了实现数据表行列转换,首先我们来创建一个数据表

CREATE TABLE MYTABLE

(

   myId int identity(1,1) constraint pk_myId primary  key,

   bookName varchar(50) not null,

   bookAuthor varchar(20) not null,

   bookPubDate datetime default getdate(),
  
   bookSaleA int ,

   bookSaleB int ,
  
   bookSaleC int

)

GO

INSERT INTO MYTABLE

   SELECT 'Spring入门','小孟',getDate(),54,52,48
      UNION ALL
   SELECT 'Spring进阶','小孟',getDate(),64,62,58
      UNION ALL
   SELECT 'proxool进阶','小刘',getDate(),33,32,28
      UNION ALL
   SELECT '加强oracle','孟进',getDate(),61,58,58
      UNION ALL
   SELECT '中国之象','刘自明',getDate(),133,132,128
      UNION ALL
   SELECT '加强MSSQL','孟进',getDate(),51,48,38

GO

SELECT * FROM MYTABLE

GO

显示的表数据为:

bookName    bookAuthor     bookPubDate        bookSaleA     bookSaleB    bookSaleC
Spring入门    小孟    2007-06-15 17:26:53.793   54           52             48 
Spring进阶    小孟    2007-06-15 17:26:53.793   64           62             58 
proxool进阶   小刘    2007-06-15 17:26:53.793   33           32             28 
加强oracle    孟进    2007-06-15 17:26:53.793   61           58             58 
中国之象     刘自明   2007-06-15 17:26:53.793   133          132            128 
加强MSSQL     孟进    2007-06-15 17:26:53.793   51           48             38 

二、自问:如果要把bookAuthor的列数据转换为行时,应该如何实现呢?

  
DECLARE @SQL VARCHAR(8000)  --为何要定义这么大呢?当你的列记录多的时候你就知道

SET @SQL = 'SELECT '  --SET 用于单行记录

SELECT @SQL = @SQL +  ' CASE bookAuthor when '''+bookAuthor+''' THEN 1 END ['+bookAuthor+'] ,' FROM (SELECT DISTINCT bookAuthor FROM MYTABLE)  AS TEMPTABLE --SELECT用于单行或者多行记录

SELECT @SQL = LEFT(@SQL,LEN(@SQL)-1) + 'INTO ##MYTABLETEMP FROM MYTABLE'

EXEC(@SQL)

SELECT * FROM ##MYTABLEtEMP

DROP TABLE ##MYTABLETEMP 

GO

查询结果:

刘自明  孟进  小刘  小孟

NULL   NULL   NULL   1
NULL   NULL   NULL   1
NULL   NULL   1      NULL
NULL   1      NULL   NULL
1      NULL   NULL   NULL
NULL   1      NULL   NULL

这样我们就实现了列到行的转换。

三、自问,既然能做到列到行的转换,那反之又如何呢?

我们将用列bookSaleA、bookSaleB、bookSaleC的数据转换为bookSaleAll列

DECLARE @SQL VARCHAR(8000)  --为何要定义这么大呢?当你的列记录多的时候你就知道

SET @SQL = '' --记得哦

SELECT @SQL = 'SELECT '''+name+''' AS bookSaleAll FROM MYTABLE UNION ALL '

             FROM syscolumns WHERE ColID LIKE 'bookSale%' ORDER BY ColID

SELECT @SQL = LEFT(@SQL,LEN(@SQL)-8)

EXEC(@SQL)

GO

注:

如果在列转为行时要把多行的数据压为一行,则需要使用max函数,如:

DECLARE @SQL VARCHAR(8000)  --为何要定义这么大呢?当你的列记录多的时候你就知道

SET @SQL = 'SELECT distinct  '  --SET 用于单行记录

SELECT @SQL = @SQL +  'max(CASE imgAppPageId when '''+imgAppPageId+''' THEN imgAppPageId else '''' END) ['+imgAppPageId+'] ,'
  FROM (SELECT DISTINCT imgAppPageId FROM PageImageTable )   AS TEMPTABLE --SELECT用于单行或者多行记录

print(@SQL)

SELECT @SQL = LEFT(@SQL,LEN(@SQL)-1) + 'INTO ##MYTABLETEMP FROM  PageImageTable '

print(@SQL)

EXEC(@SQL)

print(@SQL)

SELECT *  FROM ##MYTABLEtEMP 

DROP TABLE ##MYTABLETEMP 
 

分享到:
评论

相关推荐

    mysql 查询行列转换

    本篇文章将深入探讨“MySQL 查询行列转换”的概念及其实际应用,这在数据分析和报表展示时尤其重要。 行转列是数据处理中的常见需求,尤其是在数据透视或汇总分析时。在 MySQL 中,我们可以使用几种方法实现这一...

    mysql 行列动态转换的实现(列联表,交叉表)

    这两种方法都是为了实现MySQL中的行列转换,但处理方式不同。动态方法适用于未知或变化的列数,而静态方法适用于列数固定的场景。在实际应用中,选择哪种方法取决于数据的特性和需求的灵活性。 需要注意的是,动态...

    数据库实现行列转换(mysql示例)

    在数据库管理中,行列转换是一种常见的数据操作,它涉及到将数据表中的行转换为列,或者将列转换为行。这种转换在数据分析、报表生成以及数据可视化时非常有用。在Oracle数据库中,可以使用"Pivot"功能轻松实现这种...

    mysql动态行转列

    MySQL 数据库中存在一个问题,即如何将一行数据转换为多列数据,以便更好地显示和分析数据。在本示例中,我们将使用存储过程来实现动态行转列,将学生的成绩信息从行数据转换为列数据。 标签解释 Java、PHP、.NET ...

    sql表数据行列互换

    以上介绍了两种实现SQL表数据行列互换的方法:一种是通过`CASE WHEN`直接构建查询,适用于科目数量较少的情况;另一种是通过动态SQL的方式生成查询语句,适用于科目数量较多的情况。这两种方法各有优缺点,在实际...

    sql 行专列 列转行 普通行列转换

    在SQL数据库操作中,行与列的转换是常见的数据处理需求。这通常涉及到将一列的数据拆分成多行,或者将多行数据合并为一列。这种操作在数据分析、报表生成以及数据清洗过程中非常常见。在SQL Server中,我们可以利用...

    Mysql 行转列 实现中派商家月额统计

    在数据分析和报表生成时,有时我们需要将数据从行格式转换为列格式,这在SQL中通常被称为“行列转换”。本篇内容主要围绕如何在MySQL中实现行转列,特别是针对商家月额统计这一具体场景进行探讨。 首先,我们要理解...

    mysql-行转列、列转行

    在实际工作中,这种行列转换对于数据汇总、报表制作和数据分析非常有用。例如,可以将销售数据按照产品和月份进行汇总,形成直观的报表;或者将人口数据按照年龄段展开,便于分析各年龄段的人口结构。同时,使用源码...

    MySql 列转行实例

    在MySQL数据库中,有时我们需要将数据表中的列转换为行,这一操作通常称为"行列转换"或"行列互换",在SQL语句中可以通过多种方法实现,如使用CASE语句、UNION ALL或者自连接等。在这个实例中,我们重点关注的是通过...

    mysql横向转纵向、纵向转横向排列的方法

    在MySQL中,还可以使用`PIVOT`功能(在某些版本中作为自定义函数实现)或通过创建视图来实现更复杂的行列转换,以适应不同的业务需求。 总结一下,MySQL中的行列转换主要依赖于`CASE`、`GROUP BY`、`UNION`等核心...

    Vue实现表格中对数据进行转换、处理的方法

    在实现数据转换和处理的过程中,需要注意Vue实例的数据结构通常为JSON格式,因此在编写格式化函数时,要确保函数能正确解析和处理JSON数据结构。同时,formatter函数必须返回处理后的数据,以便更新到界面上。 总结...

    Mysql的列修改成行并显示数据的简单实现

    在MySQL中,有时候我们需要将原本存储为列的数据转换为行的形式进行展示,这种操作被称为“行列转换”或“Pivot”。在本示例中,我们将详细介绍如何通过SQL语句实现这个功能,特别是在处理时间序列数据时,如按年份...

    浅析SQL语句行列转换的两种方法 case…when与pivot函数的应用

    在SQL中,对数据进行行列转换是数据分析过程中常见的需求,特别是在报表展示或数据汇总时。本文将详细探讨两种实现这一转换的方法:`CASE...WHEN` 和 `PIVOT` 函数,通过具体的示例来解析它们的用法。 1. `CASE......

    sql行列互换

    通过以上三个例子可以看出,在不同的数据库环境下实现行列互换的核心思路是相同的:都是基于 `CASE WHEN` 语句来筛选数据,并通过分组(`GROUP BY`)和聚合函数(如 `SUM`)来完成行列互换的操作。掌握这些技巧,...

    sql.rar_SQL 脚本

    4. **自连接**:在某些情况下,可以通过自连接表来实现行列转换,特别是在处理层次结构数据时,比如组织结构或时间序列数据。 5. **CROSS JOIN和UNION ALL**:通过交叉连接和并集操作,可以组合行数据以形成新的列...

    MySQL学习之旅(一)查询一个字段中相同属性的最大值

    第一种方法通过行列转换,可能在处理大量数据时效率较低,但逻辑清晰,适用于不同数量的科目。而第二种方法利用`GREATEST`函数,代码简洁,适用于已知固定数量的字段,但当字段数量增加时,可能需要修改SQL语句。 ...

    poi解析jsp上传的excel文件并导入mysql(支持xls和xlsx)优化版

    总的来说,这个项目实现了通过JSP接收用户上传的Excel文件,利用Apache POI解析文件内容,然后将解析后的数据优化处理后存入MySQL数据库。这个过程涉及到文件上传、数据解析、数据库操作等多个环节,体现了Java Web...

    易语言-mysql简单导出EXCEL易语言

    使用`创建文件`、`写入文本`等命令,配合适当的行列索引,就可以完成数据的写入。 为了将数据库结果集写入Excel,你需要遍历查询结果,每次处理一行数据。可以使用循环结构,如`对于`或`直到`循环,来逐行处理。...

Global site tag (gtag.js) - Google Analytics