在做报表应用时,总是要涉及行行色色的数据操作,如题,就是一个很好的例子:
一、为了实现数据表行列转换,首先我们来创建一个数据表
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中的行列转换,但处理方式不同。动态方法适用于未知或变化的列数,而静态方法适用于列数固定的场景。在实际应用中,选择哪种方法取决于数据的特性和需求的灵活性。 需要注意的是,动态...
在数据库管理中,行列转换是一种常见的数据操作,它涉及到将数据表中的行转换为列,或者将列转换为行。这种转换在数据分析、报表生成以及数据可视化时非常有用。在Oracle数据库中,可以使用"Pivot"功能轻松实现这种...
MySQL 数据库中存在一个问题,即如何将一行数据转换为多列数据,以便更好地显示和分析数据。在本示例中,我们将使用存储过程来实现动态行转列,将学生的成绩信息从行数据转换为列数据。 标签解释 Java、PHP、.NET ...
以上介绍了两种实现SQL表数据行列互换的方法:一种是通过`CASE WHEN`直接构建查询,适用于科目数量较少的情况;另一种是通过动态SQL的方式生成查询语句,适用于科目数量较多的情况。这两种方法各有优缺点,在实际...
在SQL数据库操作中,行与列的转换是常见的数据处理需求。这通常涉及到将一列的数据拆分成多行,或者将多行数据合并为一列。这种操作在数据分析、报表生成以及数据清洗过程中非常常见。在SQL Server中,我们可以利用...
在数据分析和报表生成时,有时我们需要将数据从行格式转换为列格式,这在SQL中通常被称为“行列转换”。本篇内容主要围绕如何在MySQL中实现行转列,特别是针对商家月额统计这一具体场景进行探讨。 首先,我们要理解...
在实际工作中,这种行列转换对于数据汇总、报表制作和数据分析非常有用。例如,可以将销售数据按照产品和月份进行汇总,形成直观的报表;或者将人口数据按照年龄段展开,便于分析各年龄段的人口结构。同时,使用源码...
在MySQL数据库中,有时我们需要将数据表中的列转换为行,这一操作通常称为"行列转换"或"行列互换",在SQL语句中可以通过多种方法实现,如使用CASE语句、UNION ALL或者自连接等。在这个实例中,我们重点关注的是通过...
在MySQL中,还可以使用`PIVOT`功能(在某些版本中作为自定义函数实现)或通过创建视图来实现更复杂的行列转换,以适应不同的业务需求。 总结一下,MySQL中的行列转换主要依赖于`CASE`、`GROUP BY`、`UNION`等核心...
在实现数据转换和处理的过程中,需要注意Vue实例的数据结构通常为JSON格式,因此在编写格式化函数时,要确保函数能正确解析和处理JSON数据结构。同时,formatter函数必须返回处理后的数据,以便更新到界面上。 总结...
在MySQL中,有时候我们需要将原本存储为列的数据转换为行的形式进行展示,这种操作被称为“行列转换”或“Pivot”。在本示例中,我们将详细介绍如何通过SQL语句实现这个功能,特别是在处理时间序列数据时,如按年份...
在SQL中,对数据进行行列转换是数据分析过程中常见的需求,特别是在报表展示或数据汇总时。本文将详细探讨两种实现这一转换的方法:`CASE...WHEN` 和 `PIVOT` 函数,通过具体的示例来解析它们的用法。 1. `CASE......
通过以上三个例子可以看出,在不同的数据库环境下实现行列互换的核心思路是相同的:都是基于 `CASE WHEN` 语句来筛选数据,并通过分组(`GROUP BY`)和聚合函数(如 `SUM`)来完成行列互换的操作。掌握这些技巧,...
4. **自连接**:在某些情况下,可以通过自连接表来实现行列转换,特别是在处理层次结构数据时,比如组织结构或时间序列数据。 5. **CROSS JOIN和UNION ALL**:通过交叉连接和并集操作,可以组合行数据以形成新的列...
第一种方法通过行列转换,可能在处理大量数据时效率较低,但逻辑清晰,适用于不同数量的科目。而第二种方法利用`GREATEST`函数,代码简洁,适用于已知固定数量的字段,但当字段数量增加时,可能需要修改SQL语句。 ...
总的来说,这个项目实现了通过JSP接收用户上传的Excel文件,利用Apache POI解析文件内容,然后将解析后的数据优化处理后存入MySQL数据库。这个过程涉及到文件上传、数据解析、数据库操作等多个环节,体现了Java Web...
使用`创建文件`、`写入文本`等命令,配合适当的行列索引,就可以完成数据的写入。 为了将数据库结果集写入Excel,你需要遍历查询结果,每次处理一行数据。可以使用循环结构,如`对于`或`直到`循环,来逐行处理。...